字符串常量前的预期标识符

时间:2012-04-07 05:46:06

标签: c++ linux constructor

有这样的程序:

#include <iostream>
#include <string>
using namespace std;
class test
{
public:
    test(std::string s):str(s){};
private:
    std::string str;
};

class test1
{
public:
    test tst_("Hi");
};

int main()
{
    return 1;
}

...为什么我执行

时会得到以下内容
  

g ++ main.cpp

main.cpp:16:12: error: expected identifier before string constant
main.cpp:16:12: error: expected ‘,’ or ‘...’ before string constant

2 个答案:

答案 0 :(得分:17)

您无法在声明它的地方初始化tst_。这只能用于静态const基元类型。相反,你需要有test1的构造函数。

编辑:这是ideone.com中的一个工作示例。注意我做了一些更改 - 首先,让测试的构造函数对字符串进行const引用以避免复制更好。第二 - 如果程序成功,你应该返回0而不是1(返回1你在ideone中得到运行时错误)

答案 1 :(得分:1)

还有另一种更简单的方式来做您想做的事:只需将您的语句从 test tst_("Hi"); 更改为 test tst_{"Hi"}; 即可。下面是修改后的代码,它按预期工作。

#include <iostream>
#include <string>
using namespace std;
class test
{
public:
    test(std::string s):str(s){cout<<"str is: "<<s;}
private:
    std::string str;
};

class test1
{
public:
    test tst_{"Hi"};
};

int main()
{   test1 obj;
    return 0;
}

请注意,我刚刚将 test tst_("Hi"); 更改为 test tst_{"Hi"};,其他一切都完全相同。只是为了确认这有效,我添加了一个 cout 来检查它是否正确初始化了 str 变量。我认为这一单行解决方案更优雅(至少对我而言)并且与新标准保持同步。