0

我对 c++ 编程和一般编程非常陌生。最近我们在课堂上的程序中添加了头文件和其他源文件(实现)。我尝试编写最简单的程序,以确保我了解将多个文件包含到一个程序中的基础知识,但它们无法编译,从而导致出现链接器错误。

即:

Undefined symbols for architecture x86_64:
  "FooBar::printSomething()", referenced from:
      _main in main-d52d70.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

当我使用“g++ main.cpp implementation.cpp”在终端中编译时,一切正常。

我的代码:

主文件

#include "header.h"

int main()
{
    FooBar object;
    object.printSomething();
    return 0;
}

头文件.h

#ifndef _Header_h_
#define _Header_h_

#include <iostream>

using namespace std;

class FooBar{
    public:
        void printSomething();

    private:
        string helloWorld;
};

#endif

实现.cpp

#include "header.h"

void FooBar::printSomething(){
    helloWorld = "Hello World!\n";
    cout << helloWorld;
}

我喜欢 CodeRunner,但这真的让我很沮丧。

谢谢!

4

1 回答 1

0

对于有类似问题的任何人,我都找到了解决方案

我错误地使头文件中的类的头文件和实现文件名称不同。

header.h 应该命名为foobar.h

implementation.cpp 应命名为foobar.cpp

当我将文件的名称更改为 foobar.h 和 foobar.cpp 时,程序编译并在 CodeRunner 中运行得很好。

我的教授告诉我,一个类的头文件和它的实现文件应该同名但文件类型不同,即 x.cpp 和 xh

于 2016-11-14T17:05:29.790 回答