【发布时间】:2010-05-27 21:02:46
【问题描述】:
我必须对这段代码做些什么才能让它编译,它正在这条线附近刹车:
auto val = what.getObject();
#include<iostream>
using namespace std;
class CUP{
public:
void whatsHappening(){}
};
class MUG{
public:
void whatsHappening(){}
};
class CupThrower{
public:
CUP cp;
CUP getObject(){ return cp;}
};
class MugThrower{
public:
MUG mg;
MUG getObject(){return mg;}
};
template <typename T> void whatsHappening(T what){
auto val = what.getObject(); //DOES NOT COMPILE
val.whatsHappening();
}
int main(){
CupThrower ct;
MugThrower mt;
whatsHappening(ct);
whatsHappening(mt);
return 0;
}
我是用VS2008编译的。
【问题讨论】:
-
发布您遇到的实际错误会很有帮助。另外,你用的是什么编译器?
-
我用的是VS2008,错误太长无法贴出来
-
VS2008 不支持
auto,移到 VS2010 或 GCC 4.4/4.5。 -
@Brian:由于
auto关键字的原始含义已经几十年没有使用过了,下一个 C++ 标准将对其进行回收,赋予它新的含义。如果你碰巧知道 C# 中的var- 那将是 C++ 中的auto。 -
@Brian:引入新关键字总是会破坏某些人的代码。 OTOH,我无法想象会有使用
auto在其原始(和冗余)中的代码,这意味着有人实际上想要使用下一代 C++ 编译器进行编译。大约十年前,我第一次看到在 c.l.c++.m 中建议重新定义auto,从那以后看到了很多讨论,并且从未听说过有人声称如果这样做他们的代码会中断。你能推荐任何具有该特征的新关键字吗?
标签: c++ templates c++11 visual-c++-2008