簡體   English   中英

在C ++中定義靜態const變量

[英]Defining static const variable in C++

我有這樣的課:

/* ClassA.h */
class ClassA{
public:
  static const size_t SIZE = 10;
  int array[SIZE];
  funcA();
  funcB();
  ...
};

並且,在另一個cpp文件中,有如下代碼:

min(ClassA::SIZE, other_variable);

但是,我無法構建此代碼,並且收到如下錯誤(在Mac OS X中最新的抄送中,Apple LLVM 4.2(clang-425.0.28))

Undefined symbols "ClassA::SIZE" ...

可能是因為“ SIZE”在頭文件中定義,並且可以像宏一樣使用,所以ClassA.o不包含“ SIZE”作為符號。 同時,在“最小”模板中使用引用代碼時,某種程度上需要符號。 (我可以通過'nm'命令檢查ClassA.o不包含“ SIZE”符號,但是引用代碼的目標文件包含“ SIZE”符號。)

通過在ClassA.cpp中定義文字數,ClassA.o可以包含“ SIZE”符號,如下所示:

const int ClassA::SIZE = 10; 

但是在這種情況下,由於在頭文件中定義了數組,因此出現了另一個類似下面的錯誤。

error: fields must have a constant size: 'variable length array in structure' extension will never be supported

原始代碼在某些較舊的編譯器(LLVM 4.0)中起作用。 有什么好辦法解決這種情況嗎?

您需要為ClassA::SIZE提供一個定義,但在聲明時仍要提供恆定的整數值:

/* ClassA.h */
class ClassA{
public:
  static const size_t SIZE = 10; // value here
  int array[SIZE];
  funcA();
  funcB();
  ...
};


/* ClassA.cpp */
const size_t ClassA::SIZE; // no value here
/* ClassA.h */
class ClassA{
public:
  static const size_t SIZE = 10;
  int array[SIZE];
  funcA();
  funcB();
  ...
};
const size_t ClassA::SIZE;

那應該工作。

為什么不使用枚舉?您可以在靜態方法中將數組定義為靜態變量(因此所有內容都在頭文件中)

class ClassA {
    public:
    enum {SIZE=10;};
    static int *array() { static int arr[SIZE]; return arr; }
};

暫無
暫無

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

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