//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中引用
到底发生了什么事?我发誓,我之前已经制作了几乎完全相同的程序,并且它已经发挥作用。答案 0 :(得分:2)
将class1.cpp更改为:
//class1.cpp
#include "class1.h"
class1::class1(int i) : var(i) {}
您不想再次定义类本身 - 只需在实现文件中定义成员函数。
然后你会建立像:
g++ main.cpp class1.cpp
[当然,用你正在使用的编译器替换正确的编译器名称]
答案 1 :(得分:0)
很可能你没有编译两个cpp文件。检查您的构建设置,确保正在编译main.cpp
和class1.cpp
。
但是你也有一个严重的问题。您要声明class1
两次。一旦进入标题:
class class1
{
public:
int var;
class1(int i = 0);
};
...再次在cpp:
class class1
{
public:
int var;
class1(int i)
{
var = i;
}
};
在C ++中,应该只有一个类的声明(并且只有一个定义)。
它的工作方式是你在标题中声明类,就像你已经完成的那样,然后你定义 cpp中的成员,如下所示:
#include "class1.h"
class1::class1(int i)
{
var = i;
}