5

我正在尝试学习如何在 C++ 中使用头文件、包含类函数定义的 .cpp 文件和主 .cpp 文件来创建类。这是我所拥有的(取自一个例子)

在类.h

class MyClass
{
public:
  void foo();
  int bar;
};

在类.cpp

#include "class.h"
using namespace std;
void MyClass::foo()
{
    cout<< "test";
}

在 main.cpp

#include "class.h" 
using namespace std;
int main()
{
  MyClass a;
  a.foo();
  return 0;
}

编译 main.cpp 会导致此错误:[Linker error] C:\:(.text+0x16): undefined reference to `MyClass::foo()' collect2: ld returned 1 exit status

我需要编译class.cpp 还是class.h?我错过了将 class.h 与 class.cpp 联系起来的方法吗?如果是这样,我该如何链接它们?

4

5 回答 5

3

您需要将实现文件编译为目标文件并将它们链接在一起。以下是您使用时的示例g++

g++ -c class.cpp -o class.o
g++ -c main.cpp -o main.o
g++ class.o main.o -o main
./main

实际上,您会添加更多选项,例如-std=c++11 -O3 -Wall -Wextra -Werror等。

于 2013-10-23T18:46:21.987 回答
1

您可以在 Linux shell 上使用g++

编译创建main.cppclass.cpp调用main.o的目标文件class.o

g++ -c class.cpp   

g++ -c main.cpp

链接目标代码main.oclass.o创建名为的可执行文件program

g++ -o program main.o class.o

然后运行program可执行文件

./program
于 2013-10-23T18:46:20.520 回答
0

-I<dir of .h file>编译 .cpp 文件时使用编译器选项。编译这两个 .cpp 文件

于 2013-10-23T18:46:51.520 回答
0

您可能只编译 main.cpp 而不是 class.cpp。

您使用什么命令来生成输出?

这应该可以正常工作:

g++ class.cpp main.cpp -o class
于 2013-10-23T18:45:06.613 回答
0

它工作正常
我在我的编译器中尝试了代码

我的类.h

#include <iostream>

class MyClass
{
public:
    void foo();
    int bar;
};

我的类.cpp

#include "MyClass.h"

using namespace std;
void MyClass::foo()
{
    cout<< "test";
}

主文件

#include <iostream>
#include "MyClass.h"

int main(int argc, const char * argv[])
{
    MyClass a;
    a.foo();
    return 0;
}

我已经尝试过 Xcode 中的代码。它工作得很好。

于 2013-10-23T18:46:27.593 回答