我有一个使用以下定义记录的方法:
void log(std::string s) {
std::string tag = "main";
std::cout << tag << " :" << s << std::endl;
}
我试图像这样调用这个方法:
log("direction" << std::to_string(direction) << ", count: " << std::to_string(count));
direction
和count
是整数。
我收到以下错误,<<
以红色下划线标出:
没有运营商&lt;&lt;匹配这些操作数。 操作数类型是const char [10]&lt;&lt;的std :: string
我的标题中有#include<string>
,以确保我的字符串正常运行。
我尝试了std::string("direction")
但问题仍然存在。
C ++初学者。帮助将不胜感激。
答案 0 :(得分:2)
用function selectAll(){
$rootScope.$broadcast("SelectAll");
}
运算符替换<<
,因为您正在操作字符串,而不是流:
+
答案 1 :(得分:2)
operator<<
不用于任意字符串连接 - 它被称为“输出流操作符”,它仅在std::ostream
的上下文中使用。
当你说...
std::cout << tag << " :" << s << std::endl;
...你实际上编写的代码大致相当于:
std::cout.operator<<(tag).operator<<(" :").operator<<(s).operator<<(std::endl);
正如您所看到的,operator<<
知道如何使用std::cout
和std::string
,但不知道如何使用字符串。
为了连接std::string
个实例,您只需使用operator+
:
log("direction" + std::to_string(direction) + ", count: " + std::to_string(count));
请注意,这种串联技术效率最高:您可能需要查看std::stringstream
或仅使用std::string::reserve
来避免不必要的内存分配。
答案 2 :(得分:0)
如果您决定使用operator<<
符号,则需要一个能够理解它的对象。
这是一个对象(我没有声称这是一个好主意):
#include <string>
#include <sstream>
#include <iostream>
void log(std::string s) {
std::string tag = "main";
std::cout << tag << " :" << s << std::endl;
}
struct string_accumulator
{
std::ostringstream ss;
template<class T>
friend string_accumulator& operator<<(string_accumulator& sa, T const& value)
{
sa.ss << value;
return sa;
}
template<class T>
friend string_accumulator& operator<<(string_accumulator&& sa, T const& value)
{
return operator<<(sa, value);
}
operator std::string () { return ss.str(); }
};
inline auto collect() -> string_accumulator
{
return string_accumulator();
}
int main()
{
int direction = 1;
int count = 1;
log(collect() << "direction" << std::to_string(direction) << ", count: " << std::to_string(count));
}
答案 3 :(得分:0)
您的函数原型是void log(std::string s);
。等待std::string
。所以你需要传递一个字符串,而不是一个流!
所以,改变一下:
log("direction" << std::to_string(direction) << ", count: " << std::to_string(count));
到此:
log("direction" + std::to_string(direction) + ", count: " + std::to_string(count));
我只将<<
运算符更改为+
运算符。它现在将括号内的所有内容连接到单个std::string
。
您的尝试意味着您希望将std::ostream
作为参数传递。也许你想阅读C++ Passing ostream as parameter。但是,如果我是你,我会重载<<
。
答案 4 :(得分:-2)
为什么不使用:
//只需包含此using namespace std;