• 締切済み

【C++】ヘッダ内でstringを格納する変数の宣

【C++】ヘッダ内でstringを格納する変数の宣言ができない 下記クラスのように、string型の変数nameを宣言したいのですができません。 どのようにしてstring型データを格納する変数を宣言すればよいのでしょうか? //--------------- //Neko.h #pragma once #include <string> ref class Neko { private: string name; public: Neko(); }; //--------------- //Neko.cpp #include "StdAfx.h" #include "Neko.h" #include <string> using namespace std; Neko::Neko(){ name = "neko"; }

みんなの回答

回答No.4

> では、どのようにstring型を宣言すればよいのですか? ポインタならもてるので:、たとえば: #include <string> using namespace System; ref class A { public: A(); String^ getName(); ~A(); !A(); private: std::string* name; }; A::A() { name = new std::string("ねこ"); } String^ A::getName() { return gcnew String(name->c_str()); } A::~A() { this->!A(); } A::!A() { delete name; } int main() { A a; Console::WriteLine(a.getName()); }

回答No.3

ヘッダ内で using ... するのはマナー違反。 面倒でも string 改め std::stinrg とすべし。 ...てか ref class 内に unmanage型をもつことはできません。

nanda_____
質問者

補足

では、どのようにstring型を宣言すればよいのですか?

回答No.2

stringではなく、std::stringと書くとか? ヘッダーでusing namespace std::string;するとか? #1さんのおっしゃるとおり、ネームスペースの問題ですね。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>できません。 っていうのはどういう状態です? ネームスペースの問題…だったりしません? cppには >using namespace std; があるのにヘッダにはないようですが。

関連するQ&A

  • C++/CLI 関数がインポートできない

    Visual C++でビルドすると、 1>ConnectionWrapsTest.cpp(12): warning C4679: 'ConnectionWraps::Class1::GetConnection' : メンバーをインポートできませんでした 1> 型 'ConnectionWraps::Class1 ' をアセンブリ 'ConnectionWraps, Version=1.0.4594.40998, Culture=neutral, PublicKeyToken=null' からインポート中に、この診断が発生しました。 という様なエラーがいくつかでて、失敗してしまいます。 何故この様なエラーが出るのか理解出来ません。解決策を教えてください。 DLL側 ------------------------------------------- // ConnectionWraps.h #pragma once using namespace System; using namespace std; #include <string> namespace ConnectionWraps { public ref class Class1 { // TODO: このクラスの、ユーザーのメソッドをここに追加してください。 public: static int GetConnection(string address, string port, string database, string userid, string password); static void CloseConnection(int handle); static int ChangeDatabase(int handle, string databaseName); static int Command(int handle, string sql); }; } -------------------------------------------------- 実行ファイル側 ---------------------------------------------------- // ConnectionWrapsTest.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" #include <string> using namespace std; using namespace System; using namespace ConnectionWraps; int main(array<System::String ^> ^args) { Console::WriteLine(Class1::GetConnection("a", "a", "a", "a", "a", "a")); return 0; } -------------------------------------------------

  • デバッグ中の変数参照について

    VS2005のC++/CLIでアプリを作っているものです。 デバッグ中に作成したメソッドの引数に渡されて来る値をウォッチで 見ようとすると「エラー: 識別子 'str' はスコープ外です」となり 中身が見れません。 作成したクラスのメンバ変数は見れます。 以下が発生したソースです。 ---------------------------- TestClass.cpp ---------------------------- #include "StdAfx.h" #include "TestClass.h" using namespace System; TestClass::TestClass(void) { } // 追加メソッド void TestClass::func( String^ str ){ String^ tmp; tmp = str; } ---------------------------- TestClass.h ---------------------------- #pragma once using namespace System; ref class TestClass { public: TestClass(void); // 追加メソッド void func( String^ ); }; ---------------------------- Form1.h ---------------------------- #pragma once #include "TestClass.h" namespace test2 { (省略) public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: ここにコンストラクタ コードを追加します // TestClass^ aaa = gcnew TestClass(); aaa->func( "あいうえお" ); } (省略) ---------------------------- プロジェクトは、CLRのWindowsフォームアプリケーションで作成しています。 初心者の質問ですが、宜しくお願い致します。

  • Visual C++ 2008 Express Editionで作ったプログラムがコンパイルできない

    http://www.asahi-net.or.jp/~yf8k-kbys/newcpp3.html このサイトに掲載されていたプログラムをまねて以下のプログラムをかいてみたのですがコンパイルが通りません。 原因などはどこにあるのか教えていただけないでしょうか。 // test003.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" //using namespace System; using namespace std; int main(array<System::String ^> ^args) { string name; //Console::WriteLine(L"Hello World"); //return 0; cout << "こんにちは。私はコンピュータです。" << endl; cout << "あなたの名前を入力してください。" << endl; cin >> name; cout << name <<"さん。よろしく。" << endl; }

  • vectorに格納されたオブジェクトの廃棄

    次のようなテストプログラムを作ってみました。 OSはVineです。 #include <iostream> #include <string> #include <vector> using namespace std; class Neko{ string name; public: Neko(){} Neko(string n):name(n){} void SetName(string n){name=n;} void Naku() const; }; void Neko::Naku() const{ cout << "名前は" << name << endl; } int main(){ int i; int num; string temp; vector <Neko> x; for(i=0;i<num;i++){ Neko *y=new Neko; x.push_back(*y); } for(i=0;i<num;i++){ cout << "名前を入力" << endl; cin >> temp; x[i].SetName(temp); } for(i=0;i<num;i++)x[i].Naku(); delete [] x;・・・※ } 廃棄(※のところ)するとき、これでは コンパイルエラーになってしまいます。 for文で回しても同じです。 どのように書けばよいのでしょうか? vectorにはポインタではなくオブジェクトが 入っていることに注意してください。

  • stringについて

    C++初心者です。 このプログラムで続行するとエラーがでます。どうしたら無事実行することが出来るのでしょうか? #include<stdio.h> #include <iostream> using namespace std; int main(void) { string str("エラー"); cout << str<< endl; } エラー 1>c:\documents and settings\****\デスクトップ\zisyu12\zisyu12\main.cpp(58) : error C2679: 二項演算子 '<<' : 型 'std::string' の右オペランドを扱う演算子が見つかりません (または変換できません)。 . . . 以下省略

  • C++/CLIのオブジェクト型配列

    VC++/CLIで、オブジェクト型の配列data、ArrayData(String^ s, int a, int d, double c)でコンストラクタをつくり array<Object^>^ data = gcnew ArrayData(String^ s, int a, double b); でインスタンス化したいのですがうまくいきません。 さらに、他クラスから、d->data[i].aで、data[i]」の配列のうち、整数型変数aを参照したいたいと思っていますがそれも上手くいきません。 例えば data[0]= gcnew ArrayData("山田",30,45.2); data[1]= gcnew ArrayData("高橋",66,43.2); data[2]= gcnew ArrayData("田中",86,62.7); のdata配列を用意します. VC++2005で作成したファイルを載せますので、それに対応したコード(.hファイルと.cppファイル)を教えてくれるとありがたいです。 このままでは、エラーです。内容は、メンバ変数、ドット演算子など。 --File Name:ArrayData.h-- #pragma once using namespace::System; ref class ArrayData { public:array<object^>^ data; public: ArrayData(String^ name,int data1,double data2); }; --File Name:ArrayData.cpp-- #include "StdAfx.h" #include "ArrayData.h" ArrayData::ArrayData() { data= gcnew array<Object^>(5); data[0]= gcnew ArrayData("山田",30,45.2); data[1]= gcnew ArrayData("高橋",66,43.2); data[2]= gcnew ArrayData("田中",86,62.7); } --File Name Form1.h-- #pragma once #include"ArrayData.h" namespace TestDataArray { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Form1 の概要 /// /// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた /// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを /// 変更する必要があります。この変更を行わないと、 /// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、 /// 正しく相互に利用できなくなります。 /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: ここにコンストラクタ コードを追加します // ArrayData^ abc = gcnew ArrayData(); //ArrayDataクラスのインスタンス化 int bee= abc->data[0].data1; //data[0]配列のdata1の値(=30)を参照 String^ cee=bee.ToString();  //beeを文字列化 MessageBox::Show(cee); //メッセージボックスにceeを表示 } protected: /// <summary> /// 使用中のリソースをすべてクリーンアップします。 /// </summary> ~Form1() { if (components) { delete components; } } private: /// <summary> /// 必要なデザイナ変数です。 /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// デザイナ サポートに必要なメソッドです。このメソッドの内容を /// コード エディタで変更しないでください。 /// </summary> void InitializeComponent(void) { this->components = gcnew System::ComponentModel::Container(); this->Size = System::Drawing::Size(300,300); this->Text = L"Form1"; this->Padding = System::Windows::Forms::Padding(0); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; } #pragma endregion }; } --File Name:TestDataArray.cpp-- // TestDataArray.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" #include "Form1.h" using namespace TestDataArray; [STAThreadAttribute] int main(array<System::String ^> ^args) { // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // メイン ウィンドウを作成して、実行します Application::Run(gcnew Form1()); return 0; }

  • C++.NET の String型の使い方

    初めて質問いたします。 C++ .NET 2005 Express Beta版を入手し、Windows Formsのプログラミングを勉強してます。 TextBoxのTextに値を変数で指定したいのですがどうすれば良いのかわかりません。   textBox1->Text = "Test"; とダイレクトに値を指定すればできるのですが、   #include <string>   using namespace std;    (省略)   string str = "Test";   textBox1->Text = str; は、エラーになってしまいます。 C++標準のstringクラスではなく、.NETはStringクラスがあるようですが、これの使い方がMSDN等で調べているのですが分かりません。 分かりやすいURLなどありましたら教えていただけませんか。

  • C++, strcpy の warning.

    VC2005 Express Edition を使ってます。 #include <iostream> #include <string> using namespace std; int main() {   char str[10] = "hello";   strcpy(str, "HELLO"); } ↑ こちらをコンパイルすると hello.cpp .\hello.cpp(8) : warning C4996: 'strcpy' was declared deprecated C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(73) : see declaration of 'strcpy' という警告が出るのはどうしてでしょうか? #include <string.h> も試したのですが同じ警告でした。

  • コンパイルできない・・。(VC++初心者です)

    VC++初心者です。 MS VC++6.0を使用しています。 プロジェクト(Win32 console application)を新規作成して,以下のソースファイル2つとヘッダファイル1つを作成して,コンパイルしたところ インクルード ファイルがオープンできません。'kneko.h': No such file or directoryとエラーが表示されます. 3つのファイルがリンクできてないのでしょうか? また,ヘッダファイルを選択,表示させてコンパイルしようとすると kneko.h の拡張子に関連したコンパイラツールがないためにコンパイルできないと警告されます。 どこが間違っているのでしょうか?よろしくおねがいします。 test.cpp ------------------------------------------------- #include <iostream> #include <cstdio> #include "kneko.h" using namespace std; int main(){ kneko x( "tama" ); x.naku(); } ------------------------------------------------- kneko.h ------------------------------------------------- #ifndef __kneko_h #define __kneko_h #include <iostream> #include <string> using namespace std; class kneko { string name; public: kneko(){}; kneko( string n ); void setname( string n ); void naku() const; }; #endif ------------------------------------------------- kneko.cpp ------------------------------------------------- #include "kneko.h" kneko::kneko( string n ){ name = n; } void kneko::setname( string n ){ name = n; } void kneko::naku() const { cout << "My name is " << name << "." << endl; } -------------------------------------------------

  • stringクラスついて

    http://www.kumei.ne.jp/c_lang/cpp/cpp_62.htm この講座にある以下のコード(一部改変)を 実行しようとVisualStudio2005/WinXP環境で cppコンソールアプリケーションとして コンパイルしたところ、エラーが出てコンパイルできませんでした。 色々試行錯誤してみましたが、どうしても上手くいきません。 BorlandC/C++5.5コンパイラでは普通にコンパイルできましたが・・。 ひょっとしてMSのWin32に対応したstringクラスが他に用意されているのでしょうか? #include <iostream> #include <string> using namespace std; int main() { string s, t, u; s = "苗字"; t = "名前"; u = s + t; cout << u << endl; return 0; }