在C++中访问构造函数
Accessing constructor in C++
我正在尝试使用类 Node 创建一个 Node 对象:
int main(){
for(int i=0; i< 20; i++)
Node *handle = new Node(i, 10);
}
class Node{
public:
static vector<Node> map;
static int totalNodes;
vector<Node> connections;
int NodeID;
Node(int ID, int weight){
NodeID = ID;
CreateConnections(weight);
totalNodes++;
map.push_back(*this);
}
出于某种原因,我得到了
'Node' : undeclared identifier
'Node' handle : undeclared identifier
syntax error : identifier node
在上课后将main((向下移动给我
unresolved external symbol
for Node::map and Node::totalNodes
我对C++有点陌生,所以任何提示将不胜感激。
你必须用
结束你的类定义 ;
class Node
{
//....
map.push_back(*this);
}; //^^^Cannot miss ;
同时,您需要在main
之前进行Node
声明。
还有一点:
Node(int ID, int weight){
NodeID = ID;
CreateConnections(weight);
totalNodes++;
map.push_back(*this);
}//missing closing } on constructor definition
未定义对map
和totalNodes
引用的原因是:类的静态成员必须在类外部初始化。因此,当您内联构造函数尝试访问它们时,不会定义它们。所以你有未定义的引用。
您应该执行以下操作:
class Node{
public:
static vector<Node> map;
static int totalNodes;
vector<Node> connections;
int NodeID;
Node(int ID);
};
int Node::totalNodes = 0; //definition of static variables
vector<Node> Node::map;
//^^^define constructor outside class body
Node::Node(int ID){ //your second parameter for ctor not used, so remove it
NodeID = ID;
totalNodes++;
map.push_back(*this);
}
您在使用后声明Node
。只需将声明移到main
之前,您应该很好:
class Node { ... };
int main() { ... }
您还可以对类执行前向声明(不带定义的标识符声明(:
class Node;
int main() { ... }
class Node { ... };
你需要做一个Node
的前向声明,比如
class Node;
int main(){
for(int i=0; i< 20; i++)
Node *handle = new Node(i, 10);
}
class Node { }; //impelementation
或者在定义class Node
后放main
.
只需将
以下行作为第一行:
class Node;
你需要把 Node 声明放在使用它的 main 之前。
仅仅提出声明是不够的,因为 main 中的新节点需要声明 Node。
至于未解析的外部,你需要定义 Node::totalNodes
int Node::totalNodes = 0;
相关文章:
- 固有构造函数的字符和访问级别
- C++:为什么无法在派生类中访问受保护的构造函数?
- 使用 CTRP 时,是否访问访问父构造函数 UB 中的子属性?
- c++ cuda:cudaMalloc在构造函数之外的托管访问
- 使用值初始化访问构造函数?
- 限制variadic模板类中的构造函数访问
- 构造函数无法访问继承类私有 int
- 从派生类访问模板基类的构造函数
- 如何在构造函数中访问类变量以分配它们,而无需在C++中使用此指针
- 访问在构造函数期间创建的值 - C++
- 从析构函数访问模板类构造函数的参数,可以吗?
- 仅当构造函数具有参数时,C++ 公共成员才能访问
- 正确的友元定义,以授予 std::map 对私有默认构造函数的访问权限
- 在派生类的构造函数初始化中无法访问受保护的函数
- 是否可以从 C++ 中的构造函数访问对象名称?
- 从构造函数访问值
- 聚合初始化不支持构造函数访问
- 无法从构造函数访问私有变量 - 不在范围(C )中
- c++工厂.子构造函数不能从父构造函数访问
- 如何通过类构造函数访问私有静态成员变量