Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

C++;限制泛型中的类型(和指针问题) 这个问题可能与C++如何处理编译时的指针有关,但这是在学习泛型时出现的。我有以下代码(在Visual Studio中不会出现任何错误): classmyclass{intx;}; 模板 int myFunc(T obj) { 返回obj.someMethod(); } int main(int argc,char*argv[]) { myClass obj=myClass(); myFunc(obj); }

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()。为什么我的第一个代

显然,“myClass”没有someMethod(),但Visual Studio没有给我任何错误。但是,当我将myFunc更改为:

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();
}