次のようなプログラムがあります:
#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++ メイン.cpp
main.cpp:16:12: error: expected identifier before string constant
main.cpp:16:12: error: expected ‘,’ or ‘...’ before string constant
ベストアンサー1
tst_
宣言した場所で初期化することはできません。これはstatic const
プリミティブ型に対してのみ実行できます。代わりに、 のコンストラクターが必要になりますclass test1
。
編集:以下に私が行った動作例を示します。ideone.com私が行ったいくつかの変更に注意してください。まず、コピーを避けるために、のコンストラクタに への参照test
を持たせる方が良いです。次に、プログラムが成功した場合、(const
string
return 0
1
return 1
イデオネ)。
#include <iostream>
#include <string>
using namespace std;
class test
{
public:
test(const std::string& s):str(s){};
private:
std::string str;
};
class test1
{
public:
test1() : tst_("Hi") {}
test tst_;
};
int main()
{
return 0;
}