私はC++クラス(heh)の割り当てを受けています。これは、データのベクトルに対して特定の操作を実行するプログラムを作成する必要があると述べています。データは、int型またはdouble型のいずれかです。プログラムはまず、どの型を使用するかをユーザーに尋ね、次に適切なベクタを宣言し、それをプログラムの残りの部分に使用する必要があります。私はこれらの線に沿って何かを考えていた:typedefの文スコープがswitch
声明の中で彼らのケースを超えて拡張しないので、あいまいな型のベクトルを作成するか、変数スコープをエスケープしますか?
// Determine type of data values
cout << "What type of values: Int (1), or Double (2)?" << endl
<< "Type: ";
int entry;
cin >> entry;
cin.ignore();
// Execute a typedef accordingly
switch (entry)
{
case 1:
typedef int TYPE;
break;
case 2:
typedef double TYPE;
break;
default:
typedef double TYPE; // Defaults to double
break;
}
// Declare the vector
vector<TYPE> numbers;
はしかし、これは動作しないことが判明しました。
私が試した何か他のものがvoidポインタを行い、その後、適切なベクトルに割り当て、そのようにすることでした:
// Declare pointer
void * numbers = nullptr;
// Declare both possible vectors
vector<int> intVector;
vector<double> doubleVector;
// Assign pointer to proper vector
switch (entry)
{
case 1:
numbers = &intVector;
break;
case 2:
numbers = &doubleVector;
break;
default:
numbers = &doubleVector;
break;
}
それは右、動作するはずのように思える。これは?さて、別のスコープの問題が発生します。何らかの理由で、スイッチのnumbers
に「未定義の識別子」というエラーが表示されます... whaaaa?
次に、typename
変数を使用しようとしましたが、明らかにそれはC++のものではありません。 (typename TYPE; ... TYPE = double; ... vector<TYPE> numbers;
のような)
次に、テンプレートの型のベクトルへのポインタを返すテンプレートMAKE_VECTOR()関数を書いて、ベクトルを指定するために同じ型の引数を取るようにしてくださいタイプ。これは説明が難しい。コードは次のとおりです。
// Returns a pointer to a new vector of a specified type. template<typename T>
vector<T> * MAKE_VECTOR(T var)
{
void * ptr;
vector<T> vec;
ptr = &vec;
return ptr;
}
これは動作していたようです。関数宣言に構文エラーはありませんが、使用するときには...
void * numbers;
// Determine type
...
switch(entry)
{
case 1:
numbers = MAKE_VECTOR((int)1);
break;
...
}
// Test
numbers->push_back(2);
機能しません。エラー:Expression must have pointer-to-class type.
私はオンラインで見て、最初にポインタを参照解除する必要があることに気付きましたか?だから、私は(*numbers)->push_back(2);
を試しましたが、どちらもうまくいきません。
私はアイデアがありません。私は何をすべきか?
@halerええ、それは私が私の答えを受け入れる前に2日待たなければならないと言われたので、それは私にそれをさせてくれませんでした... – vasilescur