需要c++默认构造函数,而不是已经用参数生成构造函数
c++ default construtor needed instead ot already made constructor with parameters
好的,这与我之前关于链表的问题有关。我已经开始使用矢量而不是链表。错误C2512:"character":没有合适的默认构造函数可用对于线路:字符pc;和character saveCharacter;我已经有了一个带参数的构造函数。我希望能够将这些保存到一个文件中。默认构造函数将一个空白字符串和两个零保存到文件中。我做错了什么。我的书没有给我一个明确的解释。
//character.h
#pragma once
#include <string>
#include <vector>
#include <ctime>
using namespace std;
class character
{
public:
character(string newCharacterName, int newCharacterDamage, int newCharacterStability);
~character();
void saveGame();
string characterName;
int characterDamage;
int characterStability;
};
class characterTree
{
public:
characterTree();
const character& getRandomStartPC()
{
srand (time(0));
int index = rand() % characters.size();
return characters[index];
}
void generateStartingPC();
private:
vector<character> characters;
};
//character.cpp
#include "character.h"
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
void genStartPC();
void runMainMenu();
character pc;
character saveCharacter;
characterTree playerCharacters;
character::character(string newCharacterName, int newCharacterDamage, int newCharacterStability)
: characterName(newCharacterName), characterDamage(newCharacterDamage), characterStability(newCharacterStability)
{
};
character::~character()
{
};
characterTree::characterTree()
{
character character1("a small rusty axe", 2, 4);
characters.push_back(character1);
character character2("a broken table leg", 2, 4);
characters.push_back(character2);
character character3("a cracked tarnised walking stick", 2, 4);
characters.push_back(character3);
character character4("a blunted mace with missing spikes", 2, 4);
characters.push_back(character4);
character character5("a dented tin cup", 2, 4);
characters.push_back(character5);
character character6("a smelly old shoe", 2, 4);
characters.push_back(character6);
character character7("a length of rope", 2, 4);
characters.push_back(character7);
character character8("a broken wine bottle", 2, 4);
characters.push_back(character8);
character character9("a dented candlestick", 2, 4);
characters.push_back(character9);
character character10("a brunt frying pan", 2, 4);
characters.push_back(character10);
}
void characterTree::generateStartingPC()
{
const character & character = playerCharacters.getRandomStartPC();
cout << "tYou are trapped within " << character.characterName << "." << endl;
cout << "tIt has a damage rating of " <<
character.characterDamage << " and a stability rating of " <<
character.characterStability << ".";
cout << endl;
}
void character::saveGame()
{
cout << "tSave code goes here." << endl;
fstream saveFile;
cout << endl;
saveFile.open("save.dat");
if (saveFile.is_open())
for (int i = 0; i < 1; i++)
{
saveFile << saveCharacter.characterName << endl;
saveFile << saveCharacter.characterDamage<< endl;
saveFile << saveCharacter.characterStability << endl;
cout << " Game Saved." << endl;
saveFile.close();
}
else
cout << " Error. Unable to open file.";
runMainMenu();
}
void genStartPC()
{
playerCharacters.generateStartingPC();
}
void saveThisGame()
{
pc.saveGame();
}
这些行:
character pc;
character saveCharacter;
需要默认构造函数。
使用std::vector<character>
还可以添加"默认构造函数"要求(因为当您调整向量大小时,元素可以是默认构造的)。
已生成具有参数的构造函数
初始化pc 时提供参数
character pc("pc", -1, -1);
character saveCharacter("saveChar", -1, -1);
或者编写默认构造函数。或者,您可以向character
构造函数添加默认值。
character(string newCharacterName = "noname", int newCharacterDamage = -1, int newCharacterStability = -1)
所有这些选择都很简单。
哦,不要把using namespace std
放在标题里——这是个坏习惯。
相关文章:
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在按值调用 (c++) 中转发构造函数参数
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- 如何在构造函数参数中初始化"std::set"?
- 何时应在构造函数参数中使用 const C++?
- 使用模板化结构作为构造函数参数
- 使用 lambda 作为构造函数参数是否需要C++ 17?
- 如何使输入文本文件成为构造函数参数?c++
- shared_ptr构造函数参数是否应按值传递
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- 复制构造函数参数为0
- 用作成员构造函数参数的函数的求值顺序
- 结构中的默认成员值或默认构造函数参数
- C++将引用成员绑定到构造函数参数
- 如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?
- 模板函数指针参数与构造函数参数
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何基于构造函数参数模板化类成员函数的代码
- 将派生类构造函数参数传递给受保护的成员
- 如何根据构造函数参数使用超类类型初始化成员变量?