簡體   English   中英

C ++未定義名稱空間

[英]C++ undefined namespace

我正在嘗試為一個簡單的c ++程序創建頭文件,實現文件和主文件,該程序使用gethostname()返回系統主機名。

我的頭文件,它聲明了我的類,數據和方法

//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時指向未定義的內存地址。 那可能不好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM