次のような複数の型を持つことができるクラスのベクトルを構築する必要があります。
#include <variant>
#include <vector>
#include "Field.h"
using namespace std;
int main()
{
variant <int, float> v;
vector <variant<Field<int>, Field<string>, Field<float>>> fdList;
fdList[0].getName();
}
そして、これはヘッダーファイルですField.h
:
#pragma once
#include <string>
#include <vector>
using namespace std;
template<class T>
class Field
{
public:
Field();
Field(string);
void setName(string);
string getName();
bool isPrime();
void toPrime();
void toForeign(Field);
~Field();
private:
string FD_Name;
vector <T> records;
bool isPrimeK = false;
string message;
};
template<class T>
string Field<T>::getName()
{
return FD_Name;
}
関数にアクセスしようとするとgetName()
、Visual Studio から次のエラー メッセージが表示され続けます。
E0135 クラス "std::variant<Field, Fieldstd::string, Field>" にはメンバー "getName" があり
ません C2039 'getName': 'std::variant<Field,Fieldstd::string,Field>' のメンバーではありません
しかし、次のようにベクトルを定義すると、問題なく動作します。
vector <Field<int>> fdList;
fdList[0].getName();
どうすればこれを修正できますか?