我对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”在终端中编译时,一切正常。
我的代码:
的main.cpp
#include "header.h"
int main()
{
FooBar object;
object.printSomething();
return 0;
}
header.h
#ifndef _Header_h_
#define _Header_h_
#include <iostream>
using namespace std;
class FooBar{
public:
void printSomething();
private:
string helloWorld;
};
#endif
implementation.cpp
#include "header.h"
void FooBar::printSomething(){
helloWorld = "Hello World!\n";
cout << helloWorld;
}
我喜欢CodeRunner,但这真让我感到沮丧。
谢谢!
答案 0 :(得分:0)
对于有类似问题的任何人我找到了解决方案:
我错误地使头文件中的类头文件和实现文件名称不同。
header.h应命名为 foobar.h
implementation.cpp应命名为 foobar.cpp
当我将文件的名称更改为foobar.h和foobar.cpp时,编译的程序在CodeRunner中运行得很好。
我的教授告诉我,一个类的头文件及其实现文件应该具有不同文件类型的相同名称,即x.cpp和x.h。