C++构造函数不会传递字符串 - 没有定义构造函数

Mar*_*ood 1 c++ string constructor

我试图在"PlayerManager"中创建一个"播放器"对象,我在VS2010中收到错误:

Error 1 error C2512: 'Player::Player' : no appropriate default constructor available c:\program files (x86)\microsoft visual studio 10.0\vc\include\memory 631 1 Server

Player.h:

#ifndef _PLAYER_H
#define _PLAYER_H

#include <iostream>
#include <string>

using namespace std;

class Player
{
public:
    Player(const string &name);
~Player(void);


private:
    string name_;
};

#endif
Run Code Online (Sandbox Code Playgroud)

这是Player.cpp中的构造函数:

Player::Player(const string &name)
{

}
Run Code Online (Sandbox Code Playgroud)

PlayerManager.h:

'#ifndef _PLAYERMANAGER_H
#define _PLAYERMANAGER_H

#include <string>
#include <vector>
#include <iostream>

#include "Player.h"

using namespace std;

class PlayerManager
{
public:
    PlayerManager(void);
    ~PlayerManager(void);

private:
    vector<Player> players;
};

#endif'
Run Code Online (Sandbox Code Playgroud)

这是我在PlayerManager.cpp中创建对象的地方:

PlayerManager::PlayerManager(void)
{
        Player test("Hello");
        players.resize(1000);
    for(int i=0; i < 960; i++){
        players.push_back(test);
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么忽略字符串"Hello",我尝试创建一个字符串对象但是给出了同样的错误.

我也试过没有在构造函数中添加const&但是给出了同样的错误.

任何帮助将不胜感激,花几个小时寻找答案.如果布局不正确,请道歉,因为这是我第一次提问.

Set*_*gie 9

该类std::vector要求您使用它的类具有默认构造函数1.你需要为你的班级提供一个.

如果你真的不希望提供一个,你可以给你的类的实例,以vector在它的构造函数调用,因此它将使用,而不是试图通过缺省方式构造一个实例:

vector v(initialsize, Player("")); // or you can pass whatever string you want the default item to have
Run Code Online (Sandbox Code Playgroud)

如果用于存储Players 的向量是成员变量,则需要将其作为默认值传递Player给初始化列表:

PlayerManager::PlayerManager() : players(initialsize, Player("")) { // assuming the vector is named players
    .... 
}
Run Code Online (Sandbox Code Playgroud)


1正如R. Martinho FernandesKerrek SB在评论中指出的那样,只有这个特定的构造函数vector(一个采用初始大小并且不给它一个默认实例的构造函数)和成员时才需要默认构造函数.功能resize当一个参数调用.如果您使用带有迭代器或a的构造函数const Allocator&,或者如果您使用resize第二个参数,那么您不需要DC.

  • @Beginner你不需要初学字符串. (2认同)
  • 默认构造函数要求仅适用于此特定构造函数和`resize`.`vector`适用于非默认构造类型,否则. (2认同)