[英]c++ Accessing variable from header vs in cpp file
因此,我已經將許多變量(即字符串,整數,字符等)放入我正在創建的所有類的頭文件中。 我今天注意到的是,通過這樣做,在嘗試訪問使用這些變量的方法時,經常會得到堆棧轉儲。 但是,如果我從頭文件中刪除該變量並將其直接放入我的cpp文件中,則可以使用。 我們只應該在c ++頭文件中使用方法聲明嗎? 如果不是這樣,為什么會發生(所有變量都是私有的,但是可以通過set和get方法進行訪問)。
謝謝
在main.cpp中:
GameManager gamemngr;
游戲管理器
#include <string>
#include "Location.h"
#ifndef GAMEMANAGER_H_
#define GAMEMANAGER_H_
class GameManager {
public:
GameManager();
Location* curLoc;
std::string gethelpMenu();
void movePlayer(int i);
private:
Location one, two;
std::string helpMenu;
void initialiseLocations();
};
#endif /* GAMEMANAGER_H_ */
位置.h
#include <string>
#ifndef LOCATION_H_
#define LOCATION_H_
class Location {
public:
Location();
void setEdges(Location *n, Location *e, Location *s, Location *w);
Location* getEdge(int i);
void setDescription(std::string s);
std::string getDescription();
private:
Location* pathways[];
bool blocked[4];
bool locked[4];
};
#endif /* LOCATION_H_ */
如果我添加一個std::string description;
到位置標頭,然后嘗試通過curLoc->getDescription
訪問它,只要到達程序中的該行,它就將堆棧轉儲。 我假設我的指針指向無效的內存,但是curLoc與對象“一個”具有相同的內存地址。 我是否錯誤地實例化了我的對象或其他東西?
編輯:我還將添加我確實將其設置為構造函數中的默認值,以確保正確初始化了字符串,但這沒有效果。
位置實現(根據我的原始實現,其說明位於頭文件中):
#include "Location.h"
#include <string>
#include <iostream>
Location::Location() {
description = "";
for (int i = 0; i < 4; i++) {
pathways[i] = NULL;
blocked[i] = false;
locked[i] = false;
}
}
void Location::setEdges(Location *n, Location *e, Location *s, Location *w) {
pathways[0] = n;
pathways[1] = e;
pathways[2] = s;
pathways[3] = w;
}
Location* Location::getEdge(int i) {
if(pathways[i] == NULL) {
return this;
} else {
return pathways[i];
}
}
void Location::setDescription(std::string s) {
description = s;
}
std::string Location::getDescription() {
return description;
}
據我可能還應該補充一點,這似乎只發生在我的描述字符串中,而不是我已經定義的edge方法,據我所知它們正在運行(我需要描述來再次檢查指針位置,以確保但它不會stackdump或引發錯誤)。
存在編譯器行為,如果編譯器看不到.cpp文件中正在使用您的變量,則它將從該類中刪除變量,除非有明確的編譯標志告訴它不要使用。 您應該始終在.cpp文件中聲明您的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.