[英]std::cout is not printing
當我使用std::cout
打印出來時,它不會向終端打印任何內容:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
std::string multiplystr(std::string string, int mult) {
for (int i = 1; i < mult; i++) {
string = string + string;
}
return string;
}
class entry {
public:
entry(int width) {
int frameWidth = width;
}
int frameWidth;
std::string framechar = "-";
std::string frame = multiplystr(framechar, (frameWidth + 4));
std::string justout = frame + '\n';
};
int main() {
entry x1(15);
std::string out1 = x1.frame;
std::cout.flush();
cout << "out1" << std::endl;
}
但是,如果我刪除除 print 語句之外的所有內容,它會正確打印。 你知道它為什么這樣做嗎?
我還使用了std::flush
但它不起作用。
您的代碼有未定義的行為,所以字面上任何事情都可能發生1 。
在您的entry
class 中,構造函數主體將其輸入width
值分配給名為frameWidth
的局部變量,該變量隱藏同名的 class 成員。 因此,永遠不會初始化frameWidth
成員。
然后在初始化frame
成員時將frameWidth
成員傳遞給multiplystr()
的mult
參數。 frame
成員在構造函數體開始運行之前就已經初始化了,所以即使你修復了構造函數體以擺脫局部變量並將width
值正確地分配給frameWidth
成員,到那時已經來不及了,損害已經完畢。
1 :在我的測試中,當我運行代碼時,在到達 print 語句之前出現運行時錯誤,因為mult
最終是一個非常大的值,導致循環崩潰可用 memory。
要解決此問題,您需要在構造函數的初始化列表而不是構造函數主體中初始化frameWidth
成員。 初始化列表將在初始化frame
成員之前初始化frameWidth
,因此在調用multiplystr()
之前。
嘗試這個:
#include <iostream>
#include <vector>
#include <string>
std::string multiplystr(std::string s, int mult) {
for (int i = 1; i < mult; i++) {
s += s;
}
return s;
}
class entry {
public:
entry(int width) : frameWidth(width) {}
int frameWidth;
std::string framechar = "-";
std::string frame = multiplystr(framechar, (frameWidth + 4));
std::string justout = frame + '\n';
};
int main() {
entry x1(15);
std::string out1 = x1.frame;
std::cout << "out1 = " << out1 << std::endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.