请注意:这段代码可能看起来过于复杂,或者引发了有关 Convert 函数如何执行的进一步问题,但我故意只展示一个非常小的示例,并且我想要做的事情的类型数量和复杂性确实值得这种性质的东西。我也知道 C++ 不支持运行时反射,这可能是下一个明显的评论。
本质上,我正在尝试实现一个 TypeConverter,它具有许多成员函数,允许它返回从一种类型转换为另一种类型的结果。 TypeConverter 本身声明并实现所需的具体函数,但每个函数的实现可以使用不同的帮助器,例如 StructConverter。帮助者本身需要访问 TypeConverter 来帮助转换他们作为成员/子对象持有的任何复杂类型。 StructConverter 本身是一个模板,因此可以是通用的,尽管某些部分需要特定的实现。
但是,我不断收到链接器错误:
ld:未定义的符号:
StructConverter
最初我认为前向类声明就足够了,但显然不是,我一直无法弄清楚我想要做的事情是否不可能(尽管对我来说,它在概念上似乎很好)或者我是否只是还没有找到合适的 C++ 构造。
提前非常感谢您在构建此过程中提供的任何帮助,或建议一种不太相似的方法,这可能有助于注意到使用 StructConverter 或类似的模板对于我的设计/期望的结果有些关键。
#include <string>
struct StructTypeA{
int time;
std::string source;
};
struct StructTypeB{
int time;
std::string source;
};
class TypeConverter;
template <typename A, typename B>
class StructConverter
{
public:
StructConverter();
A Convert(B b, TypeConverter &tc)
{
A a;
a.source = b.source;
a.time = b.time;
// a.SomeMoreComplexType = tc.Convert(b.ComplexType);
return a;
}
};
class TypeConverter
{
private:
StructConverter<StructTypeA, StructTypeB> sconverter;
public:
StructTypeA Convert(StructTypeB b, TypeConverter &tc)
{
return sconverter.Convert(b, tc);
}
};
int main()
{
TypeConverter tc;
StructTypeB b;
b.source = "somewhere";
b.time = 5;
StructTypeA a = tc.Convert(b, tc);
return 0;
}
您声明了一个默认构造函数,
StructConverter()
,但没有在任何地方定义它。仅此而已。