我正在尝试制作基于文本的RPG,而且我对c ++来说相当新。我知道我需要返回一个值,但是当我尝试返回CharacterName或CharacterRace时,它会出现未解析的外部错误。我非常感谢帮助人员,谢谢:)
CharacterCreation.h
#include <string>
#include <iostream>
void petc(), ConsoleClear(), petc(), EnterClear();
std::string CharacterName, CharacterRace;
Main.cpp的
#include <iostream>
#include <limits>
#include <string>
#include <string.h>
#include "CharacterCreation.h"
std::string CharacterCreation();
int main()
{
CharacterCreation();
}
std::string CharacterCreation(int RaceChoice, int RaceChoiceLoop)
{
RaceChoiceLoop = 0;
std::cout << "Welcome to the character creation V 1.0.0" << std::endl;
EnterClear();
std::cout << "Choose a name: ";
std::cin >> CharacterName;
std::cout << CharacterName << std::endl;
EnterClear();
while (RaceChoiceLoop == 0)
{
std::cout << "(1) Human - Human's race perks: + 5 to Magic | + 1 to Sword Skill" << std::endl;
std::cout << "(2) Elf - Elve's race perks: + 5 to Archery | + 1 to Magic" << std::endl;
std::cout << "(3) Dwarf - Dwarven race perks: + 5 to Strength | + 1 to Archery" << std::endl;
std::cout << "Choose a race, " << CharacterName << ": ";
std::cin >> RaceChoice;
if (RaceChoice == 1)
{
RaceChoiceLoop = 1;
CharacterRace = "Human";
}
else if (RaceChoice == 2)
{
RaceChoiceLoop = 1;
CharacterRace = "Elf";
}
else if (RaceChoice == 3)
{
RaceChoiceLoop = 1;
CharacterRace = "Dwarf";
}
else
{
std::cout << "Invalid Option";
EnterClear();
RaceChoiceLoop = 0;
}
}
}
void petc()
{
std::cout << "Press Enter To Continue...";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
void EnterClear()
{
std::cout << "Press Enter To Continue...";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
system("cls");
}
void ConsoleClear()
{
system("cls");
}
答案 0 :(得分:3)
声明的 std :: string 函数应该返回一个字符串,这与在屏幕上打印它不一样,使用 return&#34;&#34; 在函数内部,否则声明 void 。
答案 1 :(得分:0)
问题是函数CharacterCreation()
(不带参数)从未定义,因此链接器找不到它。
尝试替换以下内容:
std :: string CharacterCreation(int,int);
int main() { CharacterCreation(1,1); }
这会调用您在CharacterCreation
函数下面实现的main
函数。这样做我可以编译(和链接)你的代码:)
答案 2 :(得分:0)
&#34;未解决的外部因素&#34;消息不是由您返回值直接引起的 它是一个链接器错误,只会因为编译成功而发生。
原因是您正在声明并调用此无参数函数:
std::string CharacterCreation();
但您使用两个参数定义此功能:
std::string CharacterCreation(int RaceChoice, int RaceChoiceLoop)
声明和定义必须匹配。
从它的外观来看,你实际上并不想要参数,而应该使用局部变量:
std::string CharacterCreation()
{
int RaceChoice = 0;
int RaceChoiceLoop = 0;
// ...
答案 3 :(得分:0)
正如我之前在评论中指出的那样,尽管您已将字符串定义为预期的字符串,但您的CharacterCreation方法不会返回任何值。
您最想要做的是将CharacterCreation签名更改为:
void CharacterCreation(int RaceChoice, int RaceChoiceLoop)
并保持当前的实施
或将所有控制台输出打包在一个字符串中,并在方法结束时返回它。
然后在main()
string result = CharacterCreation();
可以检索此值,您可以在主
中打印它