0
我試圖通過構造函數傳遞帶有字符串的文件名,我的代碼是這樣的。爲了簡單起見,我刪除了一些不必要的東西。通過構造函數將值傳遞給std :: ifstream
// header file
Interpreter(const std::string location);
std::ifstream *file;
// end header file
// class file
Interpreter::Interpreter(const std::string location) {
file = new std::ifstream(location.c_str());
}
// end class file
但是,結果是「Debug Assertion Failed!」(調試斷言失敗!)。
編輯: 作爲一個相當新手C++程序員(從Java來了),我已經採取了一個初始化列表的建議,這是我現在的代碼(在頭):
std::ifstream file;
Interpreter(const std::string location) {
file.open(location.c_str());
}
但是我仍然得到相同的錯誤,有什麼幫助嗎?謝謝!
編輯2:
int main(int argc, char** argv) {
Interpreter *interpreter = nullptr;
// check if arguments are provided
if (argc > 0) {
interpreter = new Interpreter(argv[1]);
} else {
// for now just use the debug script
error("No input files, using default script (debug)");
interpreter = new Interpreter("test.m");
}
interpreter->read();
delete interpreter;
return 0;
}
編輯3
你的意思是這個初始化列表?
Interpreter::Interpreter(const std::string location): file(location) {
}
編輯4
最後的編輯,謝謝你們:) 原來,問題是用論據
而且ARGC> 0並不意味着ARGV [1]是安全的訪問。
這是在CPP文件中,仍然給出相同的結果。 d:
不需要指針。使用初始化程序列表。瞧,不再需要三條規則。 – chris
你可以顯示執行呼叫的代碼嗎? – Angew
已添加編輯2 :) – chapman