簡體   English   中英

使用命名空間在另一個頭文件中定義常量

[英]Define constants in another header file with namespace

第一個問題

//Constants.hh
namespace Constants{
    static double pi;
    static double e;
    // ...
};

//Constants.cc
#include "Constants.hh"
Constants::pi = 3.1415;
Constants::e = 2.72;
// ..

如果我編譯: g++ Constants.cc

我收到一個錯誤,指出類和Constants中的epi沒有命名類型。

第二個問題

我也有:

//Angle.hh
class Angle {
public:
static double piatto;
static double retto;
static double giro;
// ...
};

//Angle.cc
#include "Angle.hh"
#include "Constants.hh"
double Angle::retto = Constants::pi / 2;
double Angle::piatto = Constants::pi;
double Angle::giro = Constants::pi * 2;
// ...

一個主要的:

#include "Angle.hh"
#include "Constants.hh"
#include <iostream>

int main()
{
    std::cout << Constants::pi << "\n\n";
    std::cout << std::endl << Angle::retto << "\n\n";

    return 0;
}

編譯是可以的,但是當我運行它時,它會打印“0”和“0”作為兩個值。 為什么?

第一個問題:正如編譯器所說,你從定義中留下了類型名稱:

double Constants::pi = 3.1415;
^^^^^^

第二個問題:你已經將變量聲明為static ,給它們內部聯系。 因此,每個翻譯單元中都會有一個單獨的副本,除了包含初始化程序的單詞外,其值為零。

選項包括:

  • 在標題中初始化它們,而不是單獨的源文件,因此它們在所有翻譯單元中具有相同的值;
  • 通過刪除static (或者如果你喜歡用extern替換它)給它們外部鏈接。

它們也應該是const來強制執行它們的恆定性。 在這種情況下,默認情況下它們將具有內部鏈接,因此如果不在標題中初始化它們,則需要顯式extern

采用

double Constants::pi = 3.1415;
double Constants::e = 2.72;

如果不使用extern進行全局變量聲明,則它將成為其隱式定義。

暫無
暫無

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

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