2016-01-30 2 views
2

Я пытаюсь создать таблицу символов для базового компилятора. У меня есть 2 конструктора в моем классе Symbol, который принимает 4 параметра, и тот, который принимает 5. У меня есть простая основная функция, которая пытается создать объект Symbol, взяв 4 параметра, а затем еще один с 5 параметрами. Компилятор жалуется на символ Ь с 5 параметрами:Компилятор не распознает перегруженный конструктор C++

error: no matching function for call to ‘Symbol::Symbol(std::string&, std::string&, int, kind, int)’ 
symbol.h:14: note: candidates are: Symbol::Symbol(const Symbol::string&, const Symbol::string&, int, kind) 
symbol.h:6: note:     Symbol::Symbol(const Symbol&) 

Я не знаю, почему его говорят, что нет функции согласования называть, потому что она есть. Хотя я не уверен, что строка «const Symbol :: &», отличная от «std :: string &», вызывает некоторую проблему или как ее исправить, если это так.

Вот основные:

int main(){ 
    string x="x"; 
    string y="y"; 
    Symbol a(x,"int",0,SCALAR); 
    Symbol b(y,"char",0,ARRAY,5); 

    //operator << is overloaded 
    cout << a << endl; 
    cout << b << endl; 
    return 0; 
} 

symbol.h:

#ifndef SYMBOL_H 
#define SYMBOL_H 
#include "type.h" 
#include <string> 

class Symbol{ 
    typedef std::string string; 
    string _name; 
    Type _type; 

public: 
    const string& getName() const; 
    const Type& getType() const; 
    Symbol(const string& name, const string& specifier, int indirection, kind kind); 
    Symbol(const string& name, const string& specifier, int indirection, kind kind, int length); 
}; 

std::ostream& operator<<(std::ostream& ostr, const Symbol& symbol); 

#endif /*SYMBOL_H*/ 

symbol.cpp

#include "symbol.h" 
#include <iostream> 
using namespace std; 

/*other member function definitions*/ 

Symbol::Symbol(const string& name, const string& specifier, int indirection, kind kind) 
{ 
    _name = name; 
    Type a(specifier,indirection,kind); 
    _type = a; 
} 

Symbol::Symbol(const string& name, const string& specifier, int indirection, kind kind, int length) 
{ 
    _name = name; 

    /*Type is another class that holds the description of the type of the  
    *particular variable, function,etc. declaration 
    */ 

    Type a(specifier,indirection,kind,length); 
    _type = a; 
} 
+3

Вы компилятор считает, что в вашем вызове есть трюк '' int '', но не в вашем конструкторе ... предполагает, что это не ваш реальный код, или вы не делаете новую сборку или что-то в этом роде. –

+1

ах. да. Он создал файл .gch, который я не видел, который, должно быть, устарел. Удалено и перекомпилировано, и все хорошо. Спасибо @LightnessRacesinOrbit – kise

ответ

3

Был файл предкомпилированного заголовка (.gch), которые должны быть устарел. Удалил его и перекомпилировал в порядке.

Смежные вопросы