2016-03-29 11 views
-1

私のコードを魅力的にする問題があります。エラーメッセージは、Map.hに「テンプレート引数がありません」と表示されます。しかし、私はそれが洗練されたAPIであるMinisatからであるため、Map.hにエラーはないと信じています。だから私はそれがコードやメイクファイルの私のせいだと思う。私は何度も試してみましたが、これで私を助けてくれますか?どうもありがとうございます!前にテンプレート引数がありません

The error message is: 
Compiling: queryOrac/queryOrac.o 
In file included from /home/parallels/Desktop/Incremental_Solver/core/SolverTypes.h:30:0, 
       from /home/parallels/Desktop/Incremental_Solver/core/Solver.h:28, 
       from /home/parallels/Desktop/Incremental_Solver/simp/SimpSolver.h:25, 
       from /home/parallels/Desktop/Incremental_Solver/queryOrac/queryOrac.cc:12: 
/home/parallels/Desktop/Incremental_Solver/mtl/Map.h: In member function ‘uint32_t Minisat::Hash<K>::operator()(const K&) const’: 
/home/parallels/Desktop/Incremental_Solver/mtl/Map.h:32:99: error: missing template arguments before ‘(’ token 
template<class K> struct Hash { uint32_t operator()(const K& k)    const { return hash(k); } }; 
                           ^
/home/parallels/Desktop/Incremental_Solver/mtl/Map.h: In member function ‘uint32_t Minisat::DeepHash<K>::operator()(const K*) const’: 
/home/parallels/Desktop/Incremental_Solver/mtl/Map.h:35:103: error: missing template arguments before ‘(’ token 
template<class K> struct DeepHash { uint32_t operator()(const K* k)    const { return hash(*k); } }; 
                            ^
make: *** [/home/parallels/Desktop/Incremental_Solver/queryOrac/queryOrac.o] Error 1 

の.ccファイルされる(このファイルは、.hファイルの実装です):

#include <map> 
#include <string> 
#include <vector> 
#include <sstream> 
#include <fstream> 
#include <iostream> 
#include <regex> 

#include "queryOrac/queryOrac.h" 
#include "incre/tools.h" 
#include "incre/dict.h" 
#include "simp/SimpSolver.h" 
#include "utils/System.h" 
#include "utils/ParseUtils.h" 
#include "utils/Options.h" 
#include "core/Dimacs.h" 

using namespace std; 
using namespace Minisat; 
using namespace Incre; 

Oracle::Oracle(const char * ora, const char * PI, const char * PO) 
{ 
    cout << "a Oracle is created" << endl; 
    PI_path = PI; 
    PO_path = PO; 
    Orac_Path = ora; 
} 

void Oracle::process() 
{ 
    parse_PI(); 
    assign_PI(); 
    solve(); 
} 

void Oracle::parse_PI() { 
    cout << "reading from " << PI_path << endl; 
    ifstream infile; 
    infile.open(PI_path, ios::in); 
    string first_line; 
    string second_line; 

    getline(infile, first_line); 
    getline(infile, second_line); 

    vector<string> name_temp; 
    vector<string> value_temp; 
    SplitString(first_line, name_temp, " "); 
    SplitString(second_line, value_temp, " "); 

    vector<string>::iterator value = value_temp.begin(); 
    for(vector<string>::iterator name = name_temp.begin(); name != name_temp.end(); ++name) 
    { 
     PI_temp.insert(pair<int, string>(varIndexDict[*name], *value)); 
     value++; 
    } 
} 

void Oracle::assign_PI(){ 
    vector<int>::iterator position = pisIndex.begin(); 
    for(map<int, string>::iterator index = PI_temp.begin(); index != PI_temp.end(); ++index) 
    { 
     if(index->second == "1") PI_assignment_cnf.push_back(tostring(*position) + " 0\n"); 
     else if(index->second == "0") PI_assignment_cnf.push_back("-" + tostring(*position) + " 0\n"); 
     position++; 
    } 
    PI_assignment_cnf.insert(PI_assignment_cnf.begin(), "c this is assign_PI\n"); 
    cnFile += PI_assignment_cnf; 
    print_vector(cnFile, "cnFile"); 
} 


void Oracle::solve(){ 
    cout << " start solving" << endl; 

} 

私のメイクファイルは、次のとおりです。

## 
## Template makefile for Standard, Profile, Debug, Release, and Release-static versions 
## 
## eg: "make rs" for a statically linked release version. 
##  "make d" for a debug version (no optimizations). 
##  "make" for the standard version (optimized, but with debug information and assertions active) 

PWD  = $(shell pwd) 
EXEC  ?= $(notdir $(PWD)) 

CSRCS  = $(wildcard $(PWD)/*.cc) 
DSRCS  = $(foreach dir, $(DEPDIR), $(filter-out $(MROOT)/$(dir)/Main.cc, $(wildcard $(MROOT)/$(dir)/*.cc))) 
CHDRS  = $(wildcard $(PWD)/*.h) 
COBJS  = $(CSRCS:.cc=.o) $(DSRCS:.cc=.o) 

PCOBJS  = $(addsuffix p, $(COBJS)) 
DCOBJS  = $(addsuffix d, $(COBJS)) 
RCOBJS  = $(addsuffix r, $(COBJS)) 


CXX  ?= g++ 
CFLAGS ?= -Wall -Wno-parentheses -std=c++11 
LFLAGS ?= -Wall 

COPTIMIZE ?= -O3 

CFLAGS += -I$(MROOT) -D __STDC_LIMIT_MACROS -D __STDC_FORMAT_MACROS 
LFLAGS += -lz 

.PHONY : s p d r rs clean 

s: $(EXEC) 
p: $(EXEC)_profile 
d: $(EXEC)_debug 
r: $(EXEC)_release 
rs: $(EXEC)_static 

libs: lib$(LIB)_standard.a 
libp: lib$(LIB)_profile.a 
libd: lib$(LIB)_debug.a 
libr: lib$(LIB)_release.a 

## Compile options 
%.o:   CFLAGS +=$(COPTIMIZE) -g -D DEBUG 
%.op:   CFLAGS +=$(COPTIMIZE) -pg -g -D NDEBUG 
%.od:   CFLAGS +=-O0 -g -D DEBUG 
%.or:   CFLAGS +=$(COPTIMIZE) -g -D NDEBUG 

## Link options 
$(EXEC):  LFLAGS += -g 
$(EXEC)_profile: LFLAGS += -g -pg 
$(EXEC)_debug:  LFLAGS += -g 
#$(EXEC)_release: LFLAGS += ... 
$(EXEC)_static:  LFLAGS += --static 

## Dependencies 
$(EXEC):  $(COBJS) 
$(EXEC)_profile: $(PCOBJS) 
$(EXEC)_debug:  $(DCOBJS) 
$(EXEC)_release: $(RCOBJS) 
$(EXEC)_static:  $(RCOBJS) 

lib$(LIB)_standard.a: $(filter-out */Main.o, $(COBJS)) 
lib$(LIB)_profile.a: $(filter-out */Main.op, $(PCOBJS)) 
lib$(LIB)_debug.a: $(filter-out */Main.od, $(DCOBJS)) 
lib$(LIB)_release.a: $(filter-out */Main.or, $(RCOBJS)) 


## Build rule 
%.o %.op %.od %.or: %.cc 
    @echo Compiling: $(subst $(MROOT)/,,[email protected]) 
    @$(CXX) $(CFLAGS) -c -o [email protected] $< 

## Linking rules (standard/profile/debug/release) 
$(EXEC) $(EXEC)_profile $(EXEC)_debug $(EXEC)_release $(EXEC)_static: 
    @echo Linking: "[email protected] ($(foreach f,$^,$(subst $(MROOT)/,,$f)))" 
    @$(CXX) $^ $(LFLAGS) -o [email protected] 

## Library rules (standard/profile/debug/release) 
lib$(LIB)_standard.a lib$(LIB)_profile.a lib$(LIB)_release.a lib$(LIB)_debug.a: 
    @echo Making library: "[email protected] ($(foreach f,$^,$(subst $(MROOT)/,,$f)))" 
    @$(AR) -rcsv [email protected] $^ 

## Library Soft Link rule: 
libs libp libd libr: 
    @echo "Making Soft Link: $^ -> lib$(LIB).a" 
    @ln -sf $^ lib$(LIB).a 

## Clean rule 
clean: 
    @rm -f $(EXEC) $(EXEC)_profile $(EXEC)_debug $(EXEC)_release $(EXEC)_static \ 
     $(COBJS) $(PCOBJS) $(DCOBJS) $(RCOBJS) *.core depend.mk 

## Make dependencies 
depend.mk: $(CSRCS) $(CHDRS) 
    @echo Making dependencies 
    @$(CXX) $(CFLAGS) -I$(MROOT) \ 
     $(CSRCS) -MM | sed 's|\(.*\):|$(PWD)/\1 $(PWD)/\1r $(PWD)/\1d $(PWD)/\1p:|' > depend.mk 
    @for dir in $(DEPDIR); do \ 
      if [ -r $(MROOT)/$${dir}/depend.mk ]; then \ 
      echo Depends on: $${dir}; \ 
      cat $(MROOT)/$${dir}/depend.mk >> depend.mk; \ 
      fi; \ 
     done 

-include $(MROOT)/mtl/config.mk 
-include depend.mk 

答えて

3

あなたの問題はusing namespace std;によるものです。しないでください、今まで

ヘッダーファイルに含まれていない限り問題はないと言われる人もいますが、間違っていて、エラーが大きな例です。

このケースでは、誤ってクラステンプレートである、std::hashに言及しているので、<>は、関数テンプレートのとは異なり、省略することができません。

+0

こんにちは、ありがとう、私の問題を解決します。いくつかの名前空間に共通する識別子がある場合は、簡単な質問をしてください。最初に "使用する"のように、使用する優先順位はありますか?例えば、ハッシュはstdで宣言され、次にIncreで宣言され、次にIncreの値ではなくstdの値になります。 –

関連する問題