- ベストアンサー
コンパイルエラー
//test.cpp #include<iostream> #include<string> class test { string hoge; public: test(string str); void method() const; } 14行目 test::test(string str) : test(hoge){} void test::method() const { std::cout << "test" << std::endl; } int main() { string s; std::cout << "名前を入力してください。" << std::endl; std::cin >> s; test aaa(s); aaa.method(); } コンパイルしようとすると下記エラーになります。 エラー E2303 test.cpp 7: 型名が必要 エラー E2139 test.cpp 7: 宣言に ; がない エラー E2293 test.cpp 10: ) が必要 エラー E2147 test.cpp 14: 引数宣言は 'string' で始められない エラー E2111 test.cpp 14: ここでは型 'test' は定義できない エラー E2136 test.cpp 14: コンストラクタには戻り型は指定できない エラー E2316 test.cpp 14: 'test::test(int)' は 'test' のメンバーではない エラー E2451 test.cpp 22: 未定義のシンボル string(関数 main() ) エラー E2379 test.cpp 22: ステートメントにセミコロン(;)がない(関数 main() ) エラー E2451 test.cpp 24: 未定義のシンボル s(関数 main() ) *** 10 errors in Compile *** ■1.型名が必要 →string hoge;と宣言してる箇所でエラー発生。 …stringと宣言してるのになぜでしょうか… ■2.宣言に";"がない →string hoge;と宣言してる箇所でエラー発生。 …";"つけてるのですが… ■3.")"が必要 →test(string str);の行でエラー発生。 …")"はどこで必要なのでしょうか ■4.引数宣言はstringでははじめられない →test::test(string str) : test(hoge){}の行でエラー発生。 …C++って引数をstringで受け取れない…?どういうことでしょうか などなど疑問がいっぱいあるのですが、どこが間違っているのかよくわかりません…ご指導よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
C++のstringは、正しくはstd::stringと書きます。 std::というのは、標準の名前空間のことで端的に言えば「標準の」を意味します。 # 一部の古いコンパイラはstd::がいらないものもあります。 # また、using namespaceというstd::を明記しなくてもいい記法があり、 # 入門書ではお手軽に使っていることがありますが、 # 基本的はヘッダでは使わない方が良い方法なので、std::と書いた方が安全です。
その他の回答 (1)
- himajin100000
- ベストアンサー率54% (1660/3060)
//bcc32で一応コンパイル通った //test.cpp //test.cpp #include<iostream> #include<string> class test{ private: std::string hoge; public: test(std::string& str) { hoge = str; } void method() const{ std::cout << hoge << std::endl; std::cout << "methodメソッドが呼び出されました" << std::endl; } }; void main(){ std::string s; std::cout << "名前を入力してください。" << std::endl; std::cin >> s; test aaa(s); aaa.method(); }
お礼
具体的なソースを提示していただいてとても助かりました。 ありがとうございました。
お礼
とてもわかりやすい解説ありがとうございました。 訂正してコンパイルするとうまくいきました。 また何か機会がありましたらご指導宜しくお願いします。