我安装了visual c ++ 2012年11月的CTP,但似乎我做错了,因为我仍然无法使用委派构造函数
我将平台工具集设置为:Microsoft Visual C ++编译器2012年11月CTP(v120_CTP_Nov2012)
这是我的代码:
#pragma once
#include<string>
class Hero
{
private:
long id;
std::string name;
int level;
static long currentId;
Hero(const Hero &hero); //disable copy constructor
Hero& operator =(const Hero &hero); //disable assign operator
public:
Hero();
Hero(std::string name, int level);
long GetId() const { return this->id; }
std::string GetName() const { return this->name; }
int GetLevel() const { return this->level; }
void SetName(std::string name);
void SetLevel(int level);
};
PS:关于c ++ 11和visual studio 2012的任何提示都受到欢迎。感谢。
LE:这是实施文件:
#include"Hero.h"
long Hero::currentId = 0;
Hero::Hero(std::string name, int level):name(name), level(level), id(++currentId)
{
}
Hero::Hero():Hero("", 0)
{
}
void Hero::SetName(const std::string &name)
{
this->name = name;
}
void Hero::SetLevel(const int &level)
{
this->level = level;
}
我在无参数构造函数上收到以下错误消息: “Hero”不是“Hero”类的非静态数据成员或基类
答案 0 :(得分:4)
您引用的错误消息由IntelliSense报告,它尚不支持新的C ++ 11语言功能。请注意,错误消息的全文为(强调我的):
IntelliSense :“Hero”不是“Hero”类的非静态数据成员或基类
The announcement for the November CTP州(强调我的):
虽然提供了一个新的Platform Toolset以方便将编译器集成为Visual Studio 2012构建环境的一部分,但 VS 2012 IDE,Intellisense,调试器,静态分析和其他工具基本保持不变且不但是为这些新的C ++ 11功能提供支持。
由11月CTP更新 的编译器拒绝具有以下错误的代码:
error C2511: 'void Hero::SetName(const std::string &)' : overloaded member function not found in 'Hero'
c:\jm\scratch\test.cpp(6) : see declaration of 'Hero'
error C2511: 'void Hero::SetLevel(const int &)' : overloaded member function not found in 'Hero'
c:\jm\scratch\test.cpp(6) : see declaration of 'Hero'
这些错误是预期的,因为您的代码格式不正确(SetLevel
和SetName
的参数在其内联声明中按值传递,并在其定义中通过引用传递)。修复这些错误后,编译器会接受您的代码。