Компилятор не распознает перегруженный конструктор Переполнение стека

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

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 :: string&»отличается от» 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;
}

2

Решение

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector