我想聲明陣列成員變量的長度,使用類別的恆定靜態變量。如果我做的:C++:如何用一個靜態常量變量指定數組長度?
// A.h
#include <array>
using namespace std;
class A {
array<int,LENGTH> internalArray;
public:
const static int LENGTH;
};
// A.cpp
#include "A.h"
constexpr int A::LENGTH{10};
有一個在A.H錯誤:「‘長度’並沒有在此範圍聲明」,聲明internalArray時。
我覺得這很奇怪,因爲類成員變量LENGTH如何超出範圍內的範圍?我發現的唯一的解決方法是初始化從A.cpp移動到A.H:
// A.h
#include <array>
using namespace std;
constexpr int LENGTH{10};
class A {
array<int,LENGTH> internalArray;
public:
const static int LENGTH;
};
但據我瞭解,首先這是兩個不同的變量:全局命名空間範圍的長度和類範圍的長度。另外,在.h中聲明一個變量(在A類之外)將在包含頭文件的每個翻譯單元中創建一個獨立的LENGTH對象。
有沒有辦法用靜態類作用域變量指定數組的長度?
_how類型成員變量<...>超出了範圍內的類_因爲編譯器自上而下讀取文件。如果某個名字在它看到的時候沒有聲明 - 會引發錯誤。而且,很明顯,「LENGTH」低於它的第一個用法。 –
您可能需要頭中定義的'LENGTH'的值(以及數組定義的上面);沒有它,'A'的實例的大小對於除'A.cpp'以外的任何人都是不可用的,這使得任何人都無法實例化你的類(他們怎麼知道要爲一個實例保留多少內存呢?) 。你有沒有嘗試按照[這裏的指導]定義它(https://stackoverflow.com/questions/16832836/defining-static-const-variable-in-c)?這是C風格的數組,但它是一樣的想法;您需要爲'LENGTH'定義一個值,將其用作編譯時常量。 – ShadowRanger
@Algirdas Preidzius你是對的我必須首先把LENGTH的聲明。 –