簡體   English   中英

C ++:通過對類對象的函數調用返回字符串值

[英]C++ : Return string value through function call on a class object

我已經開始學習C ++,並嘗試在做游戲的同時進行一些令人興奮的事情。 我已經使用Mainbean和另一個類來處理我的項目(使用Netbeans)來處理一些邏輯。 在深入研究邏輯之前,我進行了測試,看是否一切都符合預期。 編譯過程沒有問題,但是當我運行項目時,我在控制台中看不到所需的文本。 我已經嘗試cout main.cpp以及對象類本身調用cout ,但是兩種方法都沒有運氣( getCharacterName沒有輸出)。

如果您有時間快速看一下下面的代碼並指出正確的方向,我將非常高興。

main.cpp

#include "character/info.h"
#include <iostream>

using namespace std;

info * character;

int main() {
    character = new info("PlayerName");
    character->getCharacterName();
    delete character;
}

info.h

#ifndef INFO_H
#define INFO_H

#include <iostream>

class info {
public:
    info(std::string) {};
    ~info() {};
    std::string getCharacterName() {};
}
#endif  /* INFO_H */

info.cpp

#include <iostream>

using namespace std;

class info {

        static string characterName;

    info(std::string charName) {
        cout<<"starting character";
        info::characterName = charName;
        cout<<"character made";
    }

    ~info() {
        cout<<"Object removed";
    }

public: void getCharacterName() {
        cout<< info::characterName;
    }
};

如前所述,最后一個函數也如下所示,其中的主要是'cout':

public: std::string getCharacterName() {
        return info::characterName;
}

提前致謝

// Pyracell

您在.h文件中聲明了空函數。 當您將聲明和定義分開時,您需要執行以下操作:

info.h

#ifndef INFO_H
#define INFO_H

#include <string>

class info {
public:
    info(std::string);
    ~info();
    std::string getCharacterName();
private
    std::string name;
};

#endif

info.cpp

#include "info.h"

#include <iostream>
using std::cout;

info::info(std::string charName) : name(charName) {
    cout<<"character made";
}

info::~info() {
    cout<<"Object removed";
}

std::string info::getCharacterName() {
    return name;
}

作為附帶說明,我認為有幾件事值得一提:

  • main.cpp ,您聲明一個全局變量來保存您的字符,這通常是我們試圖避免的事情
  • 仍然在main.cpp ,使用new在哪里做info("MyCharacterName");來創建角色info("MyCharacterName"); 可能就足夠了
  • 上面的最后一點表明您聲明了一個信息,但實際上它是您的班級正在建模的一個字符,也許班級名稱信息不相關
  • 通常,以大寫字母開頭類名是一個好習慣

繼續從事這個項目,最好的學習方法就是一次又一次地練習...

這里有很多問題:

  • character是全局character (除非必要,請避免使用全局character
  • character分配有new character (盡可能使用自動存儲)
  • 標頭將方法定義為空(由於{}
  • info.cpp中的getCharacterName返回值與標頭中的返回值不同
  • characterNamestatic ,僅出現在info.cpp (在這種情況下,它應該是普通成員;無論如何,都需要在標頭中聲明)
  • info.cpp文件中,您使用class關鍵字(它將聲明一個新的類Info這意味着您的代碼將無法編譯或確實很奇怪),請使用info:info(std::string charName)info::~info() 〜info info::~info()std::string info::getCharacterName()定義函數(有關詳細信息,請參見Uflex答案)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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