C++;编译时未找到类方法 < >我用Cead(.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
当我像这样用g++编译main.cpp文件时C++;编译时未找到类方法 < >我用Cead(.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,c++,g++,C++,G++,当我像这样用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) no
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,我非常确定我的方法存在,但为什么找不到
符号错误不断出现?请告诉我我的错误。谢谢。当您调用g++main.cpp
时,编译器同时执行编译和链接。但是如果没有Hello.cpp
文件,则无法链接代码。因此,您有两个选项:分别编译和链接:
g++ -c main.cpp
g++ -c hello.cpp
gcc main.o hello.o
或者同时编译和链接所有内容:
g++ main.cpp hello.cpp
请不要不必要地使用指针和new
<代码>你好你好;你好,说你好代码>可能的副本谢谢您的回答,先生。很抱歉,我需要在main.cpp中包含许多类,并使用控制台从其他程序动态编译,是否有任何方法允许我合并所有需要的头(或预编译它?),这样我就不必编译所有的*.cpp?例如,像g++allheader.a main.cpp
而不是g++a.cpp b.cpp c.cpp d.cpp main.cpp
。是的,您可以创建一个静态库:首先使用-c
选项编译除main之外的所有.cpp模块:g++-c a.cpp
,g++-c b.cpp
等(因此您有o
文件)然后用ar rcs allheader.a a a.o b.o c.o d.o
创建一个库。然后您就可以执行g++main.cpp allheader.a
。非常感谢您,先生。它帮助了我……)
g++ -c main.cpp
g++ -c hello.cpp
gcc main.o hello.o
g++ main.cpp hello.cpp