Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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++ - Fatal编程技术网

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++;编译时未找到类方法 < >我用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文件时

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