我有这堂课:
class Token {
std::string name; // token name
int frequency;//frequency
Vector lines;//lines where the token is present
public:
//explanations for the methods in the Token.cpp
Token(std::string tokenname, int linenumber);
virtual ~Token();
void newEntry(int &linenumber);
std::string getName();
int getFrequency();
std::string toString();
};
还有另一个班级
class Node {
Token data;
Node* next;
public:
Node(const Token &v);
};
在节点的构造函数中,我想传递对令牌对象的常量引用。但是当我在cpp文件中编写方法时:
Node::Node(const Token &v){
data = v;
}
我收到编译错误:
../ src / List.cpp:在构造函数'Node :: Node(const Token&)':.. / src / List.cpp:11:26:错误:没有用于调用'Token的匹配函数: :Token()'Node :: Node(const Token& v){ ^ ../src/List.cpp:11:26:注意:候选者是:在../src/List.h:10:0中包含的文件中, from ../src/List.cpp:8:../src/Token.h:19:2:注意:Token :: Token(std :: string,int)Token(std :: string tokenname,int linenumber) ; ^ ../src/Token.h:19:2:注意:候选人需要2个参数,0提供../src/Token.h:12:7:注意:Token :: Token(const Token&)类令牌{ ^ ../src/Token.h:12:7:注意:候选人需要1个参数,0提供make:*** [src / List.o]错误1
如何解决此问题以及导致此问题的原因?我真的想传递令牌参考/
答案 0 :(得分:3)
你需要改变这样的实现:
Node::Node(const Token &v) : data(v){
}
调用正确的构造函数,否则编译器将首先调用默认构造函数(缺少,因此消息),然后调用赋值运算符。
答案 1 :(得分:2)
根据您的代码,Token
需要有默认的ctor,但它没有。课程data
中的Node
将首先由其默认ctor初始化,然后由operator=
在Node::Node
的ctor中分配。您可以使用ctor初始化列表来解决它,而是调用Token
的副本。
Node::Node(const Token &v) : data(v) {}