[英]Function must return a value
我正在嘗試制作基於文本的RPG,而我對C ++還是相當陌生。 我知道我需要返回一個值,但是當我嘗試返回CharacterName或CharacterRace時,它會出現無法解決的外部錯誤。 我非常感謝幫助人員,謝謝:)
角色創建
#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");
}
聲明的std :: string函數應該返回一個字符串,這與在屏幕上打印該字符串不同,請在函數內部使用return“ something”否則將其聲明為void 。
問題在於從未定義函數CharacterCreation()
(不帶參數),因此鏈接器無法找到它。
嘗試替換以下內容:
std :: string CharacterCreation(int,int);
int main(){CharacterCreation(1,1); }
這將調用您在main
函數下方實現的CharacterCreation
函數。 這樣做,我可以編譯(和鏈接)您的代碼了:)
“未解決的外部因素”消息不是直接由您返回值引起的。
這是一個鏈接器錯誤,僅在編譯成功后才會發生。
原因是您要聲明並調用此無參數函數:
std::string CharacterCreation();
但是您要使用兩個參數定義此函數:
std::string CharacterCreation(int RaceChoice, int RaceChoiceLoop)
聲明和定義必須匹配。
從外觀上看,您實際上並不需要參數,而應該使用局部變量:
std::string CharacterCreation()
{
int RaceChoice = 0;
int RaceChoiceLoop = 0;
// ...
正如我之前在評論中指出的那樣,盡管您已將字符串定義為期望的字符串,但您的CharacterCreation方法不會返回任何值。
您最可能想做的是將CharacterCreation簽名更改為:
void CharacterCreation(int RaceChoice, int RaceChoiceLoop)
並保持當前的實施
或將所有控制台輸出打包為字符串,然后在方法末尾將其返回。
然后在main()
string result = CharacterCreation();
可以檢索此值,然后可以在主窗口中打印
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.