-1

我在 2012 年 11 月安装了 Visual c++ CTP,但似乎我做错了什么,因为我仍然无法使用委托构造函数

  1. 我将平台工具集设置为:Microsoft Visual C++ Compiler Nov 2012 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);
    };
    

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”的非静态数据成员或基类

4

1 回答 1

4

您引用的错误消息是由 IntelliSense 报告的,它还不支持新的 C++11 语言功能。请注意,错误消息的全文如下(强调我的):

IntelliSense:“Hero”不是“Hero”类的非静态数据成员或基类

11 月 CTP 的公告指出(重点是我的):

虽然提供了一个新的平台工具集以方便将编译器集成为 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在其内联声明中按值传递,并在其定义中按引用传递)。修复这些错误后,编译器将接受您的代码。

于 2013-01-21T02:44:03.627 回答