C++候选函数不可行

C++ candidate function not viable

本文关键字:不可行 候选函数 C++      更新时间:2024-04-27

我试图打印出一个空矢量,但收到以下错误:

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/ostream:220:20: note: candidate function not viable: no known conversion from 'vector<int>' to 'basic_streambuf<std::basic_ostream<char>::char_type> *' (aka 'basic_streambuf<char> *') for 1st argument
basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb);
^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/ostream:223:20: note: candidate function not viable: no known conversion from 'vector<int>' to 'std::nullptr_t' for 1st argument
basic_ostream& operator<<(nullptr_t)

我也试过做std::cout << vec << std::endl;,但它仍然不起作用。

这是我的代码:

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
int main() {
vector <int> vec(5);
cout << vec << endl;
return 0;
}

不要因为转换为std::nullptr_t失败而挂断电话。这个错误基本上意味着你的向量类型没有重载输出流操作符。因此,您必须为向量实现自己的输出函数,类似于以下内容:

#include <iostream>
#include <string>
#include <vector>
template<typename type_t>
std::ostream& operator<<(std::ostream& os, const std::vector<type_t>& vector)
{
bool comma = false;
for (const auto& item : vector)
{
if (comma) std::cout << ", ";
std::cout << item;
comma = true;
}
std::cout << "n";
return os;
}
int main() 
{
std::vector<int> vec{ 1,2,3,4,5 };
std::cout << vec;
return 0;
}