编译器建议 class 的两个候选人
compiler suggests two candidates for class
我正在学习 c++98,但在编译我的节点时出现此错误 class:
Node.cpp:13:1: error: no declaration matches ‘Node::Node(Node::dataType&)’
13 | Node::Node(dataType& initData){
| ^~~~
In file included from Node.cpp:7:
node.h:13:7: note: candidates are: ‘Node::Node(const Node&)’
13 | class Node{
| ^~~~
node.h:19:5: note: ‘Node::Node(const dataType&)’
19 | Node(const dataType&);
| ^~~~
node.h:13:7: note: ‘class Node’ defined here
13 | class Node{
| ^~~~
这是我的Node.cpp
#include "node.h"
#include <cstdlib>
using namespace std;
Node::Node(dataType& initData){
data = initData;
next = NULL;
prev = NULL;
}
void Node::setData(dataType& newData){
data = newData;
}
void Node::setNext(Node* nextLink){
next = nextLink;
}
void Node::setPrev(Node* prevLink){
prev = prevLink;
}
dataType Node::getData(){
return data;
}
Node* Node::getPrev(){
return prev;
}
Node* Node::getNext(){
return next;
}
这是我的Node.h
#ifndef TYLER_NODE
#define TYLER_NODE
#include <iostream>
#include <cstdlib>
#include "EToll.h"
class Node{
public:
//TYPEDEF
typedef EToll dataType;
//CONSTRUCTOR
Node(const dataType&);
void setData(const dataType&);
void setNext(Node*);
void setPrev(Node*);
dataType getData() const;
const Node* getPrev() const;
Node* getPrev();
const Node* getNext() const;
Node* getNext();
private:
dataType data;
Node* next;
Node* prev;
};
#endif
它应该是一个简单的 class,它包含 EToll 的实例(来自 EToll.h)以供在链表中使用,但我收到此错误。看起来编译器将 Node class 误认为是 Node 构造函数,但我仍在学习,所以我不太确定
这里的混乱源于编译器在报告候选人时彻底。第一个是 implicitly 声明的复制构造函数,它在空间上引用 class 名称,因为它是隐式的。在这里看到这不是很有帮助,因为无论如何你都不能定义一个隐式声明的函数,但是那个检查在“你完全匹配任何构造函数吗?”之后,你没有因为 const
.
我正在学习 c++98,但在编译我的节点时出现此错误 class:
Node.cpp:13:1: error: no declaration matches ‘Node::Node(Node::dataType&)’
13 | Node::Node(dataType& initData){
| ^~~~
In file included from Node.cpp:7:
node.h:13:7: note: candidates are: ‘Node::Node(const Node&)’
13 | class Node{
| ^~~~
node.h:19:5: note: ‘Node::Node(const dataType&)’
19 | Node(const dataType&);
| ^~~~
node.h:13:7: note: ‘class Node’ defined here
13 | class Node{
| ^~~~
这是我的Node.cpp
#include "node.h"
#include <cstdlib>
using namespace std;
Node::Node(dataType& initData){
data = initData;
next = NULL;
prev = NULL;
}
void Node::setData(dataType& newData){
data = newData;
}
void Node::setNext(Node* nextLink){
next = nextLink;
}
void Node::setPrev(Node* prevLink){
prev = prevLink;
}
dataType Node::getData(){
return data;
}
Node* Node::getPrev(){
return prev;
}
Node* Node::getNext(){
return next;
}
这是我的Node.h
#ifndef TYLER_NODE
#define TYLER_NODE
#include <iostream>
#include <cstdlib>
#include "EToll.h"
class Node{
public:
//TYPEDEF
typedef EToll dataType;
//CONSTRUCTOR
Node(const dataType&);
void setData(const dataType&);
void setNext(Node*);
void setPrev(Node*);
dataType getData() const;
const Node* getPrev() const;
Node* getPrev();
const Node* getNext() const;
Node* getNext();
private:
dataType data;
Node* next;
Node* prev;
};
#endif
它应该是一个简单的 class,它包含 EToll 的实例(来自 EToll.h)以供在链表中使用,但我收到此错误。看起来编译器将 Node class 误认为是 Node 构造函数,但我仍在学习,所以我不太确定
这里的混乱源于编译器在报告候选人时彻底。第一个是 implicitly 声明的复制构造函数,它在空间上引用 class 名称,因为它是隐式的。在这里看到这不是很有帮助,因为无论如何你都不能定义一个隐式声明的函数,但是那个检查在“你完全匹配任何构造函数吗?”之后,你没有因为 const
.