编译时找不到 C++ 类方法

标签 c++ g++

我使用头文件 (.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/

相关文章:

c++ - 包装一个运算符重载方法

c++ - 将多个文本文件合并为一个

c++ - 具有实时过程的银行家算法

c++ - 在 C++11 中,什么时候将指针传递给另一个线程会出现竞争条件?

c++ - 使用 g++ 链接编译指示

c++ - 无法识别 g++ 文件格式;将 Object.o 视为链接描述文件

c++ - 带有 STL 映射和列表的指针

c++ - 如何将模板化成员函数专门化为 C++ 中的模板化类?

c++ - 关于for_each用法的cpp

c++ - "Recompile with -fPIC"即使在添加 -fPIC 编译标志后错误仍然存​​在