みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

コンパイルエラー

//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で受け取れない…?どういうことでしょうか

などなど疑問がいっぱいあるのですが、どこが間違っているのかよくわかりません…ご指導よろしくお願いします。

投稿日時 - 2007-07-07 21:43:06

QNo.3147867

すぐに回答ほしいです

質問者が選んだベストアンサー

C++のstringは、正しくはstd::stringと書きます。
std::というのは、標準の名前空間のことで端的に言えば「標準の」を意味します。
# 一部の古いコンパイラはstd::がいらないものもあります。
# また、using namespaceというstd::を明記しなくてもいい記法があり、
# 入門書ではお手軽に使っていることがありますが、
# 基本的はヘッダでは使わない方が良い方法なので、std::と書いた方が安全です。

投稿日時 - 2007-07-07 21:57:13

お礼

とてもわかりやすい解説ありがとうございました。
訂正してコンパイルするとうまくいきました。
また何か機会がありましたらご指導宜しくお願いします。

投稿日時 - 2007-07-08 03:12:58

ANo.1

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

//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();

}

投稿日時 - 2007-07-07 22:19:48

お礼

具体的なソースを提示していただいてとても助かりました。
ありがとうございました。

投稿日時 - 2007-07-08 03:11:33

あなたにオススメの質問