如何在C++中使用常量数组的成员函数?

Pau*_*ams 0 c++ arrays constants

这是我所拥有的(不工作)的简化版本:

prog.h:

...
const string c_strExample1 = "ex1";
const string c_strExample2 = "ex2";
const string c_astrExamples[] = {c_strExample1, c_strExample2};
...
Run Code Online (Sandbox Code Playgroud)

prog.cpp:

...
int main()
{
    int nLength = c_astrExamples.length();
    for (int i = 0; i < nLength; i++)
        cout << c_astrExamples[i] << "\n";
    return 0;
}
...
Run Code Online (Sandbox Code Playgroud)

当我尝试构建时,我收到以下错误:错误C2228:'.length'的左边必须有class/struct/union

仅当我尝试使用c_astrExamples的成员函数时才会发生此错误.如果我用数字2替换"c_astrExamples.length()",一切似乎都能正常工作.

我能够使用c_strExample1和c_strExample2的成员函数,所以我认为这种行为源于我使用字符串与字符串数组之间的一些区别.

我在prog.h中的初始化是错误的吗?在prog.cpp中我需要一些特别的东西吗?

Gru*_*rig 6

C++中的数组没有成员函数.你应该像vector<string>你想要一个对象一样使用一个集合,或者像这样计算长度:

int nLength = sizeof(c_astrExamples)/sizeof(c_astrExamples[0]);
Run Code Online (Sandbox Code Playgroud)

  • @quamrana - Grumdrig的句子正确地解析了我."如果你想要等待,你应该使用X,否则就这样做." 完美的语法结构. (4认同)
  • 关于数组中元素数量的计算:还有其他解决方案,明确搜索它.虽然最初很难阅读,但有模板化的版本,如果你试图在非数组元素(作为指针)上调用它,它们会适得其反.一个简单的模板化版本是:`template <typename T,std :: size_t N> inline std :: size_t array_size(T(&a)[N]){return N; 对我来说,这比所提出的解决方案更好(如果遇到指针而不是数组,那将会很难失败) (2认同)