gpt4 book ai didi

C++ 未定义的命名空间

转载 作者:行者123 更新时间:2023-11-27 22:37:26 29 4
gpt4 key购买 nike

我正在尝试为使用 gethostname() 返回系统主机名的简单 C++ 程序创建头文件、实现文件和主文件。

声明类、数据和方法的头文件

//hostname.h
#pragma once

namespace hostnamespace
{
class hostname_class
{
public:
hostname_class();
void to_string();

private:
char *name;
};
}

定义类和方法的实现文件

//hostname_class.cpp
#include "hostname.h"
#include <iostream>
#include <unistd.h>
#include <limits.h>

using namespace hostnamespace;
using namespace std;

class hostname_class{
private:
char *name;
public:
hostname_class(){
gethostname(name, HOST_NAME_MAX);
}
void to_string(){
cout << "Hostname:" << &name << endl;
}
};

我的主程序文件

//hostname_main.cpp
#include "hostname.h"
#include <iostream>

using namespace hostnamespace;

int main() {
hostname_class host;
host.to_string();
return 0;
}

当我尝试运行 g++ -o main hostname_main.cpp hostname_class.cpp

我收到这个错误

/bin/ld: /tmp/ccGfbyuu.o: in function `main':
hostname_main.cpp:(.text+0x1f): undefined reference to `hostnamespace::hostname_class::hostname_class()'
/bin/ld: hostname_main.cpp:(.text+0x2b): undefined reference to `hostnamespace::hostname_class::to_string()'
collect2: error: ld returned 1 exit status

如有任何帮助,我们将不胜感激。

最佳答案

您正在全局命名空间中重新声明 hostname_class,而不是在您想要的命名空间中定义它。

如何编写 hostname_class.cpp 文件的示例结构。

#include <iostream>
#include <unistd.h>
#include <limits.h>
#include "hostname.h"

using namespace std;

namespace hostnamespace
{

hostname_class::hostname_class() {
gethostname(name, HOST_NAME_MAX);
}

void hostname_class::to_string() {
cout << "Hostname:" << name << endl;
}
};

旁注 - 我逐字逐句地复制了您的方法实现。它会编译。但是 name 肯定是未初始化的,当您将它传递给 gethostname 时,它指向一个未定义的内存地址。这可能不太好。

关于C++ 未定义的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52508606/

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