gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:58:51 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com