为何cout无法输出vector<string>内容?我的FizzBuzz代码无任何输出
问题分析与修复方案
核心问题1:空指针调用成员函数
你声明了MyClass* ptr1 = nullptr;,这是一个空指针,没有指向任何MyClass的实例。直接通过空指针调用成员函数fizz_buzz属于未定义行为,程序可能无输出甚至崩溃。
修复方法:
- 用栈上实例(更简单):
MyClass my_class; const auto v1 = my_class.fizz_buzz(100); - 或用堆上实例(需正确初始化):
MyClass* ptr1 = new MyClass(); const auto v1 = ptr1->fizz_buzz(100); // 打印逻辑 delete ptr1;
核心问题2:vector插入顺序错误
你一开始获取了v1.begin()的迭代器it,每次向这个位置插入元素。但vector插入元素到开头时,原迭代器会失效,且最终容器内容是倒序的(比如先插1,再插2到开头,结果是2,1),和期望的正序输出相反。
修复方法:改用push_back向容器末尾添加元素,保证顺序正确:
vector<string> fizz_buzz (const int max) { vector<string> v1; for (int i = 1; i <= max; i++) { if (i % 5 == 0 && i % 3 == 0) { v1.push_back("FizzBuzz!"); } else if (i % 5 == 0) { v1.push_back("Buzz"); } else if (i % 3 == 0) { v1.push_back("Fizz"); } else { v1.push_back(to_string(i)); } } return v1; }
额外注意:成员函数访问权限
MyClass的fizz_buzz函数默认是私有(private)的,必须改为public才能在main中调用,否则编译会报错。
完整修复代码
#include <iostream> #include <vector> #include <string> using namespace std; class MyClass { public: vector<string> fizz_buzz (const int max) { vector<string> v1; for (int i = 1; i <= max; i++) { if (i % 5 == 0 && i % 3 == 0) { v1.push_back("FizzBuzz!"); } else if (i % 5 == 0) { v1.push_back("Buzz"); } else if (i % 3 == 0) { v1.push_back("Fizz"); } else { v1.push_back(to_string(i)); } } return v1; } }; int main() { MyClass my_class; const auto v1 = my_class.fizz_buzz(100); for (const string &s : v1) { cout << s << "\n"; } return 0; }
内容的提问来源于stack exchange,提问作者Younes Mdarhri Alaoui
相关产品推荐
相关产品推荐

