Visual Studio 15:重载"<<" C++中的插入运算符
Visual Studio 15: Overloading "<<" insertion operator in C++
下面的代码在GNU GCC v7.1.1上工作正常,但在VS15
上给出一个错误
#include <iostream>
class Logger {
public:
//var should be initialized in init loge level function
bool debug_log_level;
friend Logger& operator << (Logger& p, const char* str);
Logger& logs(std::string severity, bool level = 0);
Logger& getInstance();
};
Logger logger;
Logger& instance= logger;
Logger& Logger::getInstance() {
static Logger theInstance;
return theInstance;
}
Logger& Logger::logs(std::string severity, bool level)
{
//Unused(level) as init is one time activity and will use it's own variable.
std::cout<<severity << ": ";
return instance;
}
//will be invoked when RHS is class reference and LHS is "str"
Logger& operator<<(Logger& p, const char* str)
{
if(p.debug_log_level)
std::cout << str << std::endl;
return instance;
}
int main()
{
logger.debug_log_level=true;
logger.logs("Info",0)<<"Ravi..";
return 0;
}
VS15 给出错误:在std::cout<<severity << ": ";
行的函数Logger::logs(std::string severity, bool level)
中,没有运算符 "<<" 匹配这些操作数。
如果我缺少VS15特定的内容,请告诉我。
根据标准,我不确定哪种实现是正确的,但在这种情况下,似乎是使用 GCCstd::ostream& operator<<(std::ostream&, const std::string&)
(见链接(是在与 Visual Studio 的 STL 不同的地方实现的,并且在包含iostream
时引入,而使用 Visual Studio 仅引入了std::string
的基本实现(在xstring
中实现(。
您可以通过添加来解决此问题
#include <string>
到您的文件(请参阅此处(
我找不到任何关于在xstring
中实现std::string
的基本功能(作为 VS(并将其包含在iostream
中是否正确的信息,而且如果您只包含iostream
,似乎实际上std::string
根本不应该可见(因为它似乎不依赖于它(。在这种情况下,在每个位置使用std::string
时,代码也应该失败。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 在未初始化映射的情况下,将值插入到映射的映射中
- 呼叫运营商<<临时
- 如何在c++中只将键插入到bimap的一侧
- 如何将结构插入到集合中并打印集合的成员
- C++json插入数组
- Visual Studio 2019:插入多个C++风格的单行注释
- nlohmann-json将一个数组插入到另一个数组中
- 有效地使用std::unordered_map来插入或增加键的值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 正在插入动态数组
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 插入或删除时获取usb的dos_name
- <<操作员在下面的行中工作
- 叮叮当当在修复时插入多个"覆盖"说明符
- 链表c++插入,所有情况都已检查,但没有任何工作
- Visual C 构建器图案插入操作员`&lt;&lt;`样式