• 締切済み

VC2010の開発

VC++(2010)でプログラミングを行っています。 #define A1 (String型) #define A2 (Int32型) #define A3 (Int32型) #define B1 (String型) #define B2 (Double型) #define B3 (Double型) #define C1 (String型) #define C2 (Double型) #define C3 (Double型) 上記のようなA、B、C(型が異なる)をリストで管理したいです。 イメージとしては XX list = {{A1, A2, A3}, {B1, B2, B3},{C1, C2, C3}} です。 テンプレートクラスで実装できますか? また、別な方法があれば教えてください。

みんなの回答

  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.1

boost::anyでそれらしいことが出来ます #include <iostream> #include <vector> #include <string> using namespace std; #include <boost/any.hpp> using namespace boost; int main(int argc, char* argv[]) { vector<any> ary; ary.push_back(string("asdf")); ary.push_back(3); ary.push_back(3.4); cout << any_cast<string>(ary[0]) << endl; cout << any_cast<int>(ary[1]) << endl; cout << any_cast<double>(ary[2]) << endl; return 0; }

関連するQ&A

  • VC++6.0のプロジェクトをVC++2005Expressで動かしたいがエラーが出まくってしまいます。

    VC++6.0のプロジェクトをVC++2005Expressで動かしたいのですが エラーが出まくってしまいます。 VC++6.0では正常にコンパイル終了するものがexpressだと、 ・・・string.h(135) : warning C4003: マクロ '__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX' に指定された実引数の数が少なすぎます。 とか、 ・・・string.h(135) : error C2065: '_string' : 定義されていない識別子です。 とか、 ・・・string.h(135) : error C2275: '_locale_t' : この型は演算子として使用できません とかです。string.hなど、触ったこともないのですが、 express用に編集が必要なのでしょうか? ちなみに PlatformSDK などはインストールして、include,exectable,library ディレクトリなどのパスも通しています。 何か良い方法を教えてください。お願いします。

  • VBのString型の配列をVCで受け取るには?

    VBでString型の配列として定義されている変数を VCのプログラムで受け取るにはどうすればよいのでしょうか? 試しにVBでString型の配列を作って DLLのC_TESTというファンクションを呼び出すという 処理を作ってみたのですが、コンパイルエラーになってしまいます。 なにかおかしいところありますか? そもそもVCにはString型ってないんですよね? プログラミング初心者ですので、変な言葉遣いに なってるかもしれませんが宜しくお願いします。 VB Declare Function C_TEST Lib "\test.dll" (ByVal data() As String) As Integer Dim A(1) As String dim rtn as Integer A(0)="あああ" A(1)="いいい" rtn= C_TEST(A) VCのプログラム int _stdcall C_TEST(LPSTR A[2] ){ AfxMessageBox( A[0] ); return(0); }

  • VC#2010 ArrayListに入れた要素の型

    こんにちは。ArrayListに異なる型のクラスを入れて、後からそれがどの型か判断してから処理しようとしているのですが、エラーになってしまいます。 //ベースオブジェクトクラス class BaseObj { string path; BaseObj(string p){path = p:} } //製品Aクラス BaseObjを継承 class ProductA : BaseObj { ProductA(string p) : base(p) {} } //製品Bクラス BaseObjを継承 class ProductB : BaseObj { ProductB(string p) : base(p) {} } ------------------------------------------- ArrayList ObjList;//オブジェクトを格納する ProductA A = new ProductA(@"C:\"); ProductB B = new ProductB(@"D:\"); ObjList.Add(A); ObjList.Add(B); ------------------------------------------- //ここでは、0番目にAが入ってると分かっているのでAかBか調べる処理は省いてます。 MessageBox.Show'((ProductA)ObjList[0]).path); 上記メッセージボックスのところで、 型 'System.Collections.Generic.List`1[Application.ProductA]' のオブジェクトを型 'Application.ProductA' にキャストできません。 というエラーになってしまいます。これはどうしてなのでしょうか?

  • VC++6.0での配列の動作不良

    現在、VC++6.0のWin32 Console Applicationプロジェクトでプログラムを書いているのですが、配列の様子がおかしいです。 具体的に言うと、ヘッダで #define N 10 #define NN (2*N*2*N) double A[NN+1][NN+1],S[NN+1][NN+1]; double B[NN+1],C[NN+1]; と配列を宣言しているのですが、A,B,Cそれぞれの配列への値の書き込みは普通に行えるのですが、 Sに値を書き込んでいる最中にプログラムが強制終了していまします。エラーメッセージなどはでません。 デバッグすると、Sに値を書き込むfor文の繰り返しの最後のほうに バンドルされていない例外は***.exeにあります。0xC0000005:Access Violation というメッセージが出てそこでプログラムが終了してしまいます。なぜでしょうか? AとSのfor文はまったく同じで、SかわりにAを使うと、このエラーは生じません。 またヘッダで、 #define N 10 #define NN 400 double A[NN+1][NN+1],S[NN+1][NN+1]; double B[NN+1],C[NN+1]; とNNを数字で表すとこのエラーが生じず、普通に実行されます。なぜこのようなことが起こるのでしょうか? どなたか教えていただければ幸いです。お願いします。

  • 至急教えてください(VC++)

    VC++の質問です。 クラスA : クラスBを宣言 B b; クラスB : クラスCを宣言 C c; クラスC クラスCからクラスBでpublicで宣言されている関数を読み出すには どうしたらよいのでしょうか。 自分を宣言したクラスのポインタを取得する関数とかがあるのでしょうか。

  • VC++2010について

    Windowsフォームアプリケーションを勉強し始めています。 Formに表示するだけの簡単なプログラムを打ち込んでみたのですが、ソリューションのビルドをしてみると、次のような2つのエラーが出ました。(実際にはもう一つあるのですが、それはintからfloatに変換されているというだけ) C1003.cpp(6): error C2143: 構文エラー : ';' が 'using' の前にありません。 C1003.cpp(19): fatal error C1075: 左側 中かっこ '{' に対応するものが 'g:\admin\visual studio 2010\projects\vc石立\c1003\c1003\Form1.h(3)' で見つかる前に EOF が検出されました。 こちらが入力したのは、Formに関するプログラムだけで、メインプログラム(.cpp)は一切変更してません。また、簡単なプログラムを何個か打ち込んでみたのですが、同じ二つのエラーが出ます。Formに関するプログラムの記述が間違ってるとも思えません。 その上、usingの前の行に” ; ”を入れてやると、一つ目のエラーは消えました(その前はinclude文)。おまけに、メインプログラムの最後の行(19行目)に” } ”を入れると、二つ目のエラーも消え、正常にビルドされ、デバックもできました。 解決はしたのですが、キツネにつままれたようです。いざ、無料でVCが手に入ると聞きつけ、喜び勇んで勉強しだしたのに…これからも同じ修正をしなくちゃと思うと、うんざりです。 コンソールアプリケーションは、問題なく動きます。 何か、心当たりのある方はいませんか? なお、打ち込んだのは、次の命令(2行目から)だけです。 #pragma endregion private: System::Void label1_Click(System::Object^ sender, System::EventArgs^ e) { } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { double a=double::Parse(textBox1->Text); double b=double::Parse(textBox2->Text); int iNum=comboBox1->SelectedIndex; double c; switch(iNum){ case 0:c=a+b;break; case 1:c=a-b;break; case 2:c=a*b;break; case 3:c=a/b;break; }

  • vc++ scanfの使い方

    vc++についてです。 最近vc++について学び始めているのですが使い方がさっぱりわかりません。 C言語は学校の方で習っておりある程度は書けるのですが・・・。 エラーは下記の通りです。 scanfを使って足し算の簡単なプログラムを作ったのですが、 デバッグ無しで実行を押すとデバッグエラーと出てしまいます。 エラー文は画像の通りです。 プログラムは、 #include<stdio.h> int main(){ int a; int b = 2; scanf("%d", a); a += b; printf("%d \n", a); return 0; } です。 テスト感覚で作ったのですが思うようにいかずどうしようかと困っています。 vc++自体が初めてなのでできれば詳しい説明お願いいたします。

  • 構造体のメンバをfor文で回したい

    次のようなソースで typedef struct test{ int a; int b; int c; }TEST; TEST xx; xx.a=xx.a+3; xx.b=xx.b+3; xx.c=xx.c+3; printf("%d %d %d\n",xx.a,xx.b,xx.c); のようなことをしたいんですが、 xx.a=xx.a+3; xx.b=xx.b+3; xx.c=xx.c+3; の処理の部分をfor文で回せるようにしたいです。 構造体の宣言のところで配列をつかって struct test{ int abc[3]; } とすれば簡単にいくのは分かるんですが、a,b,cそれぞれに分かりやすい名前をつけたいので、配列で確保したくないです。 何かいい方法はないでしょうか? 実際計算に使うんですが、メンバはすべてdouble型で30個程度になると思います。

  • 内部クラス?のエラー

    内部クラス?のエラー  今晩は、JAVA初心者です、宜しくお願い致します。  下のようなプログラムを書いてやりました。  <A>のように全体のプログラムを1つのクラスの中に別のクラスを入れる(内部クラス?)と、 「アクセス可能な型Testのエンクロージング・インスタンスがありません。  型Testのエンクロージング・インスタンスで割り振りを限定する必要があります。  (例えばx.new A()でxはテストのインスタンス)」というエラーがでます。  しかし、<B>のように別のクラスにすると、エラーは出ません。  この原因がよくわかりません。 ==================================================================== <A> public class Test { public static void main(String args[]) { Calc ca = new Calc(); ca.calcTest(1,2); } class Calc { void calcTest(int a , int b ) { int c = a + b ; System.out.print("a + b = " + c); } } } ==================================================================== <B> public class Test { public static void main(String args[]) { Calc ca = new Calc(); ca.calcTest(1,2); } } class Calc { void calcTest(int a , int b ) { int c = a + b ; System.out.print("a + b = " + c); } } ====================================================================

    • ベストアンサー
    • Java
  • C++ テンプレートクラス内のメソッド 警告 意味

    VC++2008 windows7 の環境でC++のプログラミングをしております. 以下の種類の警告がいくつか出てくるのですが,この警告の理由が分かる方いますか? 実行結果には影響は出ていませんが,出来れば消したいと考えています. クラス テンプレート のメンバ関数 void A<T>::TEST(A<T> *,int) のコンパイル中 1> .\main.cpp(69) : コンパイルされたクラスの テンプレート のインスタンス化 1> 'A<T>' の参照を確認してください 1> with 1> [ 1> T=uchar 1> ]

専門家に質問してみよう