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&但是给出了同样的错误.
任何帮助将不胜感激,花几个小时寻找答案.如果布局不正确,请道歉,因为这是我第一次提问.
该类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)
如果用于存储Player
s 的向量是成员变量,则需要将其作为默认值传递Player
给初始化列表:
PlayerManager::PlayerManager() : players(initialsize, Player("")) { // assuming the vector is named players
....
}
Run Code Online (Sandbox Code Playgroud)
vector
(一个采用初始大小并且不给它一个默认实例的构造函数)和成员时才需要默认构造函数.功能resize
当一个参数调用.如果您使用带有迭代器或a的构造函数const Allocator&
,或者如果您使用resize
第二个参数,那么您不需要DC.