0
//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>main.obj:错误 LNK2019:函数 _main 中引用的未解析外部符号“public:__thiscall class1::class1(int)”(??0class1@@QAE@H@Z)

到底他妈发生了什么?我发誓我以前制作过几乎完全相同的程序并且它有效。

4

2 回答 2

2

将 class1.cpp 更改为:

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

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

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

然后你将构建它:

g++ main.cpp class1.cpp

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

于 2013-07-09T20:23:32.120 回答
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 中定义成员,如下所示:

类1.cpp

#include "class1.h"

class1::class1(int i)
{
    var = i;
}
于 2013-07-09T20:26:23.217 回答