簡體   English   中英

頭文件中的常量指針

[英]Constant pointers in header files

我以前曾遇到以下問題,從那時起一直在下意識地避免它,但從未完全理解為什么會這樣。 有人可以向我解釋以下內容有什么問題嗎?

在頭文件Library.h

#ifndef LIBRARY_H
#define LIBRARY_H

#include <string>

const char ok = 'K';

const char* problem = "Problem";
const std::string fine = "Fine";

#endif 

在包含主文件的main.cpp

#include "Library.h"

using namespace std;

int main()
{
    return 0;
}

即使在頭文件中有保護條件並且僅出現一次multiple definition of 'problem'時,在編譯multiple definition of 'problem'時出現以下錯誤。 這似乎適用於我放置在頭文件中的任何指針,但不適用於okfine類的常規常量。

如果我將問題更改為非常數: char* problem = "Problem"我會收到有關不建議使用的轉換的警告,但不會收到多個定義,並且會編譯。

我正在使用g ++ 4.6.3和Code :: Blocks 12.11

更新:已使用g ++ 4.7.1(帶有和不帶有Code :: Blocks)進行了重新測試,並且不再遇到問題。 關於那些建議使用externstatic人,除了與舊版編譯器的兼容性之外,還有其他理由在這種情況下使用它們(您只需要一個簡單的c字符串常量)嗎?

這里的"Problem"是不能保證每次包含標頭時字符串"Problem"都不相同。

您可以通過使用static解決

static const char* problem = "Problem";

但是,如果您希望在多個源文件中看到SAME變量problem ,那么該方法也不起作用。 在這種情況下,您需要執行以下操作:

extern const char* problem;

然后在library.cpp或類似的文件中:

const char* problem = "Problem";

暫無
暫無

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

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