ページ 1 / 1
クラス内でのString型オブジェクトの宣言
Posted: 2015年6月10日(水) 22:31
by はんなり
クラス内でString型のオブジェクトを宣言したいのですが、
下記のようにするとエラーを出してしまいます。どうすれば良いでしょうか?
※ ソフトはVS2010を使用しています。
コード:
class a{
void f(){
printf(%f,k);
}
protected:
double k;
std::string s;//←ここがエラー
};
Re: クラス内でのString型オブジェクトの宣言
Posted: 2015年6月10日(水) 22:33
by Rittai_3D
#include <string>
していますか?
エラーメッセージがわからないので勘です。
Re: クラス内でのString型オブジェクトの宣言
Posted: 2015年6月10日(水) 22:36
by みけCAT
はんなり さんが書きました:クラス内でString型のオブジェクトを宣言したいのですが、
下記のようにするとエラーを出してしまいます。
String型ではなく、C++の標準ライブラリのstd::string型でいいですか?
はんなり さんが書きました:どうすれば良いでしょうか?
適切にコードを補えばいいと思います。
コード:
#include <cstdio> // printfを利用するために追加
#include <string> // std::stringを利用するために追加
class a{
void f(){
printf("%f",k); // %fの前後に"を追加
}
protected:
double k;
std::string s;//←ここがエラー
};
int main(){} // リンクエラーを防ぐために追加(コンパイルだけなら必要ない)
Wandboxで確認しました。
Re: クラス内でのString型オブジェクトの宣言
Posted: 2015年6月10日(水) 22:38
by みけCAT
ちゃんとString型のオブジェクトを宣言してみました。
ついでに不要な#includeを消しました。
コード:
// 不正なコードを消してコンパイルを通す
#define printf(a,b)
// String型が定義されていないので、適当に作成
class String {
};
class a{
void f(){
printf(%f,k);
}
protected:
double k;
// 型名を修正
String s;//←ここがエラー
};
int main(){} // リンクエラーを防ぐために追加(コンパイルだけなら必要ない)
Wandboxで確認
Re: クラス内でのString型オブジェクトの宣言
Posted: 2015年6月10日(水) 22:42
by みけCAT
もしくは、VS2010を使うのをやめて、素直にJavaで書けばいいです。
コード:
class A {
private void f() {
// これはできない気がするので、申し訳ないがコメントアウト
//printf(%f,k);
}
protected double k;
protected String s;
}
Re: クラス内でのString型オブジェクトの宣言
Posted: 2015年6月10日(水) 22:50
by はんなり
回答ありがとうございます。
あまり良くわからなかったのですが、ヘッダーにクラスを宣言していたのが原因のようでした。
.cpp内に移動したら問題なく動作しました。
ちなみにエラーは、
"error C2039: 'string' : 'std' のメンバーではありません。"
というものでした。
ありがとうございました。
Re: クラス内でのString型オブジェクトの宣言
Posted: 2015年6月12日(金) 00:29
by GRAM
はんなり さんが書きました:回答ありがとうございます。
あまり良くわからなかったのですが、ヘッダーにクラスを宣言していたのが原因のようでした。
.cpp内に移動したら問題なく動作しました。
ちなみにエラーは、
"error C2039: 'string' : 'std' のメンバーではありません。"
というものでした。
ありがとうございました。
おそらくヘッダーで#include <string>を最初にインクルードしてないからじゃないですかね?
コード:
class a{
void f(){
printf(%f,k);
}
protected:
double k;
std::string s;//←ここより手前でstringの定義がいる.つまりヘッダファイルの一番最初に#include <string>と書いておけば多分大丈夫
};
Re: クラス内でのString型オブジェクトの宣言
Posted: 2015年6月12日(金) 18:56
by はんなり
そういえばヘッダーにはインクルードしてませんでした。
おかげで原因が分かりました。ありがとうございます!