-1

Visual C++ November 2012 CTP をインストールしましたが、委任コンストラクターをまだ使用できないため、何か間違っているようです

  1. Platform Toolset を次のように設定しました: 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; 
}

パラメーターなしのコンストラクターで次のエラー メッセージが表示されます。

4

1 に答える 1

4

引用したエラー メッセージは、新しい C++11 言語機能をまだサポートしていない IntelliSense によって報告されています。エラーメッセージの全文は次のとおりです(強調は私のものです):

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'

コードの形式が正しくないため、これらのエラーが予想されます ( と のパラメーターはSetLevelSetNameインライン宣言では値によって渡され、定義では参照によって渡されます)。これらのエラーが修正されると、コンパイラはコードを受け入れます。

于 2013-01-21T02:44:03.627 に答える