クラス内でのString型オブジェクトの宣言

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
はんなり
記事: 48
登録日時: 13年前

クラス内でのString型オブジェクトの宣言

#1

投稿記事 by はんなり » 8年前

クラス内でString型のオブジェクトを宣言したいのですが、
下記のようにするとエラーを出してしまいます。どうすれば良いでしょうか?
※ ソフトはVS2010を使用しています。

コード:

class a{
 void f(){
  printf(%f,k);
 }
protected:
 double k;
 std::string s;//←ここがエラー
};

Rittai_3D
記事: 525
登録日時: 11年前

Re: クラス内でのString型オブジェクトの宣言

#2

投稿記事 by Rittai_3D » 8年前

#include <string>
していますか?
エラーメッセージがわからないので勘です。
初心者です

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: クラス内でのString型オブジェクトの宣言

#3

投稿記事 by みけCAT » 8年前

はんなり さんが書きました:クラス内で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で確認しました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: クラス内でのString型オブジェクトの宣言

#4

投稿記事 by みけCAT » 8年前

ちゃんとString型のオブジェクトを宣言してみました。
ついでに不要な#includeを消しました。

コード:

// 不正なコードを消してコンパイルを通す
#define printf(a,b)

// String型が定義されていないので、適当に作成
class String {
};

class a{
 void f(){
  printf(%f,k);
 }
protected:
 double k;
 // 型名を修正
 String s;//←ここがエラー
};

int main(){} // リンクエラーを防ぐために追加(コンパイルだけなら必要ない)
Wandboxで確認
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: クラス内でのString型オブジェクトの宣言

#5

投稿記事 by みけCAT » 8年前

もしくは、VS2010を使うのをやめて、素直にJavaで書けばいいです。

コード:

class A {
	private void f() {
		// これはできない気がするので、申し訳ないがコメントアウト
		//printf(%f,k);
	}
	protected double k;
	protected String s;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
はんなり
記事: 48
登録日時: 13年前

Re: クラス内でのString型オブジェクトの宣言

#6

投稿記事 by はんなり » 8年前

回答ありがとうございます。

あまり良くわからなかったのですが、ヘッダーにクラスを宣言していたのが原因のようでした。
.cpp内に移動したら問題なく動作しました。

ちなみにエラーは、
"error C2039: 'string' : 'std' のメンバーではありません。"
というものでした。

ありがとうございました。

アバター
GRAM
記事: 164
登録日時: 13年前
住所: 大阪

Re: クラス内でのString型オブジェクトの宣言

#7

投稿記事 by GRAM » 8年前

はんなり さんが書きました:回答ありがとうございます。

あまり良くわからなかったのですが、ヘッダーにクラスを宣言していたのが原因のようでした。
.cpp内に移動したら問題なく動作しました。

ちなみにエラーは、
"error C2039: 'string' : 'std' のメンバーではありません。"
というものでした。

ありがとうございました。
おそらくヘッダーで#include <string>を最初にインクルードしてないからじゃないですかね?

コード:

class a{
 void f(){
  printf(%f,k);
 }
protected:
 double k;
 std::string s;//←ここより手前でstringの定義がいる.つまりヘッダファイルの一番最初に#include <string>と書いておけば多分大丈夫
};

アバター
はんなり
記事: 48
登録日時: 13年前

Re: クラス内でのString型オブジェクトの宣言

#8

投稿記事 by はんなり » 8年前

そういえばヘッダーにはインクルードしてませんでした。
おかげで原因が分かりました。ありがとうございます!

閉鎖

“C言語何でも質問掲示板” へ戻る