简单代码 - 未解析的外部符号 - c ++

时间:2013-07-09 20:19:23

标签: c++ compiler-errors

//class1.cpp
#include <iostream>
#include <stdlib.h>

using namespace std;

class class1
{
public:
    int var;
    class1(int i)
    {
        var = i;
    }
};

//class1.h:
#include <iostream>
#include <stdlib.h>

using namespace std;

class class1
{
public:
    int var;
    class1(int i = 0);
};

//main.cpp
#include <iostream>
#include <stdlib.h>
#include "class1.h"
using namespace std;

int main()
{
    class1 a(5);

    return 0;
}

错误:     1&gt; main.obj:错误LNK2019:未解析的外部符号“public:__thiscall class1 :: class1(int)”(?? 0class1 @@ QAE @ H @ Z)在函数_main中引用

到底发生了什么事?我发誓,我之前已经制作了几乎完全相同的程序,并且它已经发挥作用。

2 个答案:

答案 0 :(得分:2)

将class1.cpp更改为:

//class1.cpp
#include "class1.h"

class1::class1(int i) : var(i) {}

您不想再次定义类本身 - 只需在实现文件中定义成员函数。

然后你会建立像:

g++ main.cpp class1.cpp

[当然,用你正在使用的编译器替换正确的编译器名称]

答案 1 :(得分:0)

很可能你没有编译两个cpp文件。检查您的构建设置,确保正在编译main.cppclass1.cpp

但是你也有一个严重的问题。您要声明class1 两次。一旦进入标题:

class class1
{
public:
    int var;
    class1(int i = 0);
};

...再次在cpp:

class class1
{
public:
    int var;
    class1(int i)
    {
        var = i;
    }
};

在C ++中,应该只有一个类的声明(并且只有一个定义)。

它的工作方式是你在标题中声明类,就像你已经完成的那样,然后你定义 cpp中的成员,如下所示:

class1.cpp

#include "class1.h"

class1::class1(int i)
{
    var = i;
}