我遇到了一个问题,我认为这是一个非常具体的问题。
我有两个课程,一个 B aseclass和一个 D 来自的课程(来自 B aseclass)。
B 是模板类(或类模板),并且具有纯虚方法 virtual void work(const T &dummy) = 0;
D 成功的课程应该重新实现,但 D 来自 B 而不是 D 是另一个模板类,编译器向我吐出虚拟函数和模板不能一次工作。
如何实现我想要的任何想法?
我感谢任何想法和想法,特别是如果你已经解决了这个问题
此类已按原样修复,我不能在不破坏现有代码库的情况下编辑它
template <typename T>
class B {
public:
...
virtual void work(const T &dummy) = 0;
..
};
以int *为例
class D : public B<int*>{
...
virtual void work(const int* &dummy){ /* put work code here */ }
..
};
编辑:编译器告诉我, D
中的void B<T>::work(const T&)
[with T = int*]
纯虚拟
答案 0 :(得分:9)
您将const放在错误的位置。尝试
virtual void work(int* const &dummy){ /* put work code here */ }
const int*
与int const*
相同,即它将const与int相关联,而不是指针。
答案 1 :(得分:1)
尝试:
int* const& dummy
答案 2 :(得分:0)
哪个编译器?
g ++ 4.4没有抱怨:
template <typename T>
class B {
public:
virtual void work(const T &dummy) = 0;
};
class D : public B<int*>{
virtual void work(const int* &dummy){ /* put work code here */ }
};
int main(){return 0;}
编辑:当然 - 错误只在实际实例化D时出现,通过移动const关键字修复:
template <typename T>
class B {
public:
virtual void work(const T &dummy) = 0;
};
class D : public B<int*>{
virtual void work(int* const &dummy){ /* put work code here */ }
};
int main(){D d;return 0;}
答案 3 :(得分:0)
你有const和参考问题的混合。以下编译:
template <typename T>
struct B {
virtual void work(T dummy) = 0;
};
struct D : public B<int*>{
virtual void work( int* dummy){ /* put work code here */ }
};
int main() {
D d;
d.work( 0 );
}