编译器和链接器给出错误,无法编译简单的类头文件[duplicate]

问题描述 投票:0回答:1

前一天晚上,当我的Visual Studio编译器开始表现异常时,我正在编码,它给了我LNK1120错误,我终于设法以某种方式解决了这个问题,但是不久之后,我再次遇到了它。我写了一个简单的头文件,该文件包含在main.cpp文件中。这是错误的一个实例:

 private: 
    string _ime;
    static int randid;
    int _magen, _id; 

在此我得到

Error LNK2001   unresolved external symbol "private: static int Karta::randid" (?randid@Karta@@0HA). 

静态int用于为我的类中的对象生成一个ID号。另一个错误是

Error LNK2019unresolved external symbol "class Polje __cdecl s(void)" (?s@@YA?AVPolje@@XZ) referenced in function _main.

两者都是相当简单的类,但我不知道这意味着什么。我读过链接器找不到对象的定义,但我似乎无法弄清楚哪个对象?我在这两个标头上都有标头防护。如果有人可以帮忙,那真是太棒了!预先谢谢!

c++ compiler-errors linker c++14
1个回答
0
投票

需要在类外定义一个(非常量)静态成员变量。

class foo {
private:
    static int randid;
};

int foo::randid; // definition

该定义通常应该在源文件中,而不是在标头中,因此您将没有该变量的多个定义。

© www.soinside.com 2019 - 2024. All rights reserved.