簡體   English   中英

函數必須返回一個值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM