gpt4 book ai didi

c++ - 怀疑用户定义类的以下代码片段中的模板实例化问题

转载 作者:行者123 更新时间:2023-11-28 01:05:13 24 4
gpt4 key购买 nike

<分区>

在论坛中找不到任何相关的内容 所以,请帮助我处理这段代码。我正在复习我的 C++ 概念并遇到一个奇怪的错误

#include<iostream>
using namespace std ;
class base
{
int i ;
public:
virtual void f(){cout<<"base" ; return ;};
};
class derived: public base
{
int j ;
public:
void f() {cout<<"derived" ; return ;}
};
template<class T>
class test
{
public:
test(T b)
{
b.f(); cout<<endl<<" "<<sizeof(b)<<endl;
}
};
int main()
{
base b ;
derived d;
test<derived> t(b); // cannot instantiate user defined type without typename
}

以下代码编译失败并出现以下错误:

test.cpp: In function ‘int main()’:
test.cpp:28: error: no matching function for call to ‘test<derived>::test(base&)’
test.cpp:19: note: candidates are: test<T>::test(T) [with T = derived]
test.cpp:17: note: test<derived>::test(const test<derived>&)

我可以胡乱猜测并得出为什么会发生这种情况的答案。如果我从模板中实例化一个新的基类,一切正常,但这个不行。有人可以告诉我模板实例化的良好来源以及规则/语义是什么,幕后发生了什么?谢谢

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com