我有以下代码:
template <typename A, typename B>
struct TheStruct {
A a;
B b;
};
class TheClass {
public:
void do_something(TheStruct<A,B> blah);
}
我在类似do_somethng
...
error: 'A' was not declared in this scope
方法上遇到编译器错误
在方法参数中定义此类型的正确语法是什么?
谢谢!
答案 0 :(得分:2)
您需要将TheClass
设为模板:
template <typename A, typename B>
class TheClass {
public:
void do_something(TheStruct<A,B> blah);
};
或者您需要将do_something()
作为模板:
class TheClass {
public:
template <typename A, typename B>
void do_something(TheStruct<A,B> blah);
};
答案 1 :(得分:0)
A和B只是模板定义中的占位符。为清楚起见:您的模板定义在语义上与
相同template <typename TotallyDifferentA, typename TotallyDifferentB>
struct TheStruct {
TotallyDifferentA a;
TotallyDifferentB b;
};
所以这并不奇怪
void do_something(TheStruct<A,B> blah);
无法编译。 A和B未定义。这编译:
class TheClass {
public:
void do_something(TheStruct<int,void(*)(double,char*)> blah);
} ;
答案 2 :(得分:0)
这取决于。您是否希望do_something
能够使用任何版本的TheStruct
或一个特定版本(例如,A
类型为int
且B
为{{1} }}?
对于第一种情况,您需要将double
或TheClass
作为模板(例如从@PigBen获取的示例):
do_something
OR
template <typename A, typename B>
class TheClass {
public:
void do_something(TheStruct<A,B> blah);
};
如果您只需要使用class TheClass {
public:
template <typename A, typename B>
void do_something(TheStruct<A,B> blah);
};
的一个特定实例,那么您可以指定确切的类型:
TheStruct