我使用头文件 (.h) 和定义文件 (.cpp) 在 C++ 中创建了一个简单的类“Hello”。这是头文件内容:
#ifndef HELLO_H
#define HELLO_H
#include <string>
namespace test
{
class Hello
{
private:
std::string name;
public:
Hello();
void say_hello();
};
}
#endif
并且定义文件内容如你所料:
#include "Hello.h"
#include <iostream.h>
using namespace test;
Hello::Hello()
{
this->name = "Yoppy Yunhasnawa";
}
void Hello::say_hello()
{
string message = "Hello, " + this->name + ".. Have nice day!";
cout << message << "\n";
}
我将这个类包含到 main.cpp 文件中并像这样使用它:
#include "Hello.h"
using namespace test;
int main(int argc, char *argv[])
{
Hello* hello = new Hello;
hello->say_hello();
}
当我像这样用g++编译main.cpp文件时,
g++ main.cpp
我遇到了以下烦人的错误:
Undefined symbols for architecture x86_64:
"test::Hello::say_hello()", referenced from:
_main in ccsaoOZa.o
"test::Hello::Hello()", referenced from:
_main in ccsaoOZa.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
但是,当我不调用构造函数和 say_hello
方法时,不会出现该错误:
int main(int argc, char *argv[])
{
Hello* hello;// = new Hello;
//hello->say_hello();
}
我使用 macport GCC 4.7,我非常确定我的方法在那里,但为什么这个symbol(s) not found
错误不断出现?请告诉我我的错误。谢谢。
最佳答案
当您调用g++ main.cpp
时,编译器执行编译和链接。但是如果没有Hello.cpp
文件就无法链接代码。因此,您有两个选择:分别编译和链接:
g++ -c main.cpp
g++ -c hello.cpp
gcc main.o hello.o
或者同时编译和链接所有内容:
g++ main.cpp hello.cpp
关于编译时找不到 C++ 类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17124280/