【发布时间】:2017-10-27 23:28:18
【问题描述】:
为什么它需要 Struct1 以及如何格式化它以便我可以修改任何结构中的属性?
我有 1 个模板类用于修改 3 个包含相同属性名称的结构中的数据,它们只是碰巧使用不同的数据类型。
我正在尝试在我的模板类中使用模板方法,在各种实例化时,一切似乎都按照我对模板类的预期工作。
GenericClass<Struct1> inventory[1000];
GenericClass<Struct2> machines[1000];
GenericClass<Struct3> physicalStructures[1000];
(是的,我知道向量存在,继续玩,我包含尽可能少的代码)也就是说,当我尝试更改结构的属性之一时,我收到一个错误,指出它正在等待struct,而不是采用我手上的任何数据类型。
Main.cpp:39:28: error: no viable conversion from 'int' to 'Struct1'
inventory[0].setIdentifier(1);
我已经检查了这 3 个参考文献(以及更多参考文献),但它们似乎并没有像我在其中的任何一个中所做的那样。 How to define template function within template class in *.inl file
Template class with template function
https://isocpp.org/wiki/faq/templates
这是我的代码示例。
template <class Type>
class GenericClass
{
private:
Type Identifier;
public:
void setIdentifier(Type Param);
Type getIdentifier();
};
/* Struct prototypes
************************/
struct Struct1
{
private:
int Identifier;
string Description;
float Value;
}
struct Struct2
{
private:
long int Identifier;
string Description;
float Value;
};
struct Struct3
{
private:
string Identifier;
string Description;
double Value;
};
int main()
{
GenericRecord<Struct1> inventory[1000];
GenericRecord<Struct2> machines[1000];
GenericRecord<Struct3> physicalStructures[1000];
inventory[0].setIdentifier(1);
}
template <class Type>
void GenericRecord<Type>::setIdentifier(Type Param)
{
Identifier = Param;
}
template <class Type>
Type GenericRecord<Type>::getIdentifier()
{
return Identifier;
}
return 方法也不起作用,我预计它们都因类似原因而失败。
再次,为什么它需要 Struct1 以及如何格式化它以便我可以修改任何结构中的属性?
【问题讨论】:
-
inventory[0]是GenericClass<Struct1>类型,因此inventory[0].setIdentifier()被指定为需要Struct1类型的参数。您的代码正在传递int。GenericClass是一个模板类,没错,但这并不意味着GenericClass<Struct1>::setIdentifier()可以接受任何类型的参数 - 它只接受Struct1类型的参数。 -
有道理,关于构建解决方案我需要了解什么?
-
可以修改
Struct1,2和3吗? -
这种情况下只能修改类。