如何使用C ++ 11功能,如在Visual C ++ 2012年11月CTP中委派构造函数?

时间:2013-01-19 16:54:30

标签: c++ visual-c++ c++11 constructor visual-studio-2012

我安装了visual c ++ 2012年11月的CTP,但似乎我做错了,因为我仍然无法使用委派构造函数

  1. 我将平台工具集设置为:Microsoft Visual C ++编译器2012年11月CTP(v120_CTP_Nov2012)

  2. 这是我的代码:

    #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);
    };
    
  3. 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”类的非静态数据成员或基类

1 个答案:

答案 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'

这些错误是预期的,因为您的代码格式不正确(SetLevelSetName的参数在其内联声明中按值传递,并在其定义中通过引用传递)。修复这些错误后,编译器会接受您的代码。