C++;限制泛型中的类型(和指针问题) 这个问题可能与C++如何处理编译时的指针有关,但这是在学习泛型时出现的。我有以下代码(在Visual Studio中不会出现任何错误): classmyclass{intx;}; 模板 int myFunc(T obj) { 返回obj.someMethod(); } int main(int argc,char*argv[]) { myClass obj=myClass(); myFunc(obj); }
显然,“myClass”没有someMethod(),但Visual Studio没有给我任何错误。但是,当我将myFunc更改为:C++;限制泛型中的类型(和指针问题) 这个问题可能与C++如何处理编译时的指针有关,但这是在学习泛型时出现的。我有以下代码(在Visual Studio中不会出现任何错误): classmyclass{intx;}; 模板 int myFunc(T obj) { 返回obj.someMethod(); } int main(int argc,char*argv[]) { myClass obj=myClass(); myFunc(obj); },c++,pointers,generics,C++,Pointers,Generics,显然,“myClass”没有someMethod(),但Visual Studio没有给我任何错误。但是,当我将myFunc更改为: template<typename T> int myFunc(T *obj) { return obj->someMethod(); } 模板 int myFunc(T*obj) { 返回obj->somethod(); } 我确实得到了一个错误,我认为这是因为编译器检查myClass没有someMethod()。为什么我的第一个代
template<typename T>
int myFunc(T *obj)
{
return obj->someMethod();
}
模板
int myFunc(T*obj)
{
返回obj->somethod();
}
我确实得到了一个错误,我认为这是因为编译器检查myClass没有someMethod()。为什么我的第一个代码块没有出现相同的错误?对于我来说,使用g++和clang通过值传递和使用指针通过引用传递都失败了++ clang++是3.6.1版 g++是4.9.2版
如果您可以在visual studio上重现此问题,请在他们的编译器上提交一个bug。使用指针传递值和引用都会因g++和clang而失败++ clang++是3.6.1版 g++是4.9.2版
如果您可以在visual studio上复制此代码,请在他们的编译器上提交一个bug。您确定您尝试了该代码吗?第一行末尾缺少分号。第一个代码是非法的,或者您没有发布准确的代码;或者你编译的代码不是你想象的那样。我重新键入了代码,而不是复制和粘贴,但我编辑了帖子以添加分号。原来有一个分号。你确定你试过那个代码吗?第一行末尾缺少分号。第一个代码是非法的,或者您没有发布准确的代码;或者你编译的代码不是你想象的那样。我重新键入了代码,而不是复制和粘贴,但我编辑了帖子以添加分号。最初有一个分号。我还检查了Visual Studio,生成失败@你确定编译的文件正确吗?我也在Visual Studio中进行了检查,但构建失败@你确定你编译的文件是正确的吗?
template<typename T>
int myFunc(T *obj)
{
return obj->someMethod();
}