- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个带有字符串转换运算符的 Foobar 类:
#include <string>
class Foobar
{
public:
Foobar();
Foobar(const Foobar&);
~Foobar();
operator std::string() const;
};
我尝试这样使用它:
//C++源文件
#include <iostream>
#include <sstream>
#include "Foobar.hpp"
int main()
{
Foobar fb;
std::stringstream ss;
ss << "Foobar is: " << fb; // Error occurs here
std::cout << ss.str();
}
我是否需要为 Foobar 显式创建一个运算符 <<?。我不明白为什么这应该是必要的,因为 FooBar 在被放入 iostream 之前被转换为一个字符串,并且 std::string 已经有运算符 << 定义。
那么为什么会出现这个错误呢?我错过了什么?
[编辑]
我刚刚发现,如果我将发生错误的行更改为:
ss << "Foobar is: " << fb.operator std::string();
编译成功。呃……!为什么编译器不能进行自动转换(Foobar -> 字符串)?
解决此问题的“最佳实践”方法是什么,这样我就不必使用上面丑陋的语法了?
最佳答案
Foobar fb 在放入您的流之前不会转换为字符串。不要求 << 运算符的参数必须是字符串。
您应该手动将其转换为字符串
ss << "Foobar is: " << std::string(fb);
或者为 Foobar 定义一个运算符<<。
定义一个运算符<< 是明智的选择,没有理由不在运算符<< 代码中调用字符串转换。
关于c++ - 在 std::operator << [With _Traits = std::char_traits<char> ] 中不匹配 'operator <<',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4848760/
我想为我自己的类型创建一个自定义的 char_traits 类。我已经声明了所有函数,但我对标准中给出的模糊语义有些困惑。 fpos_type、off_type 和 state_type 应该做什么?
我正在学习 c++ 字符串中使用的 std::char_traits,然后我意识到 std::char_traits 可用于创建自定义字符串类,如 cplusplus.com's article 中的
考虑以下程序: #include #include #include int main(int, char **) { std::basic_stringstream stream; s
void assign(char_type& to, char_type from); 为什么不能只使用赋值运算符而不是使用 this function ?这是干什么用的? 最佳答案 实际上每次使用
根据GCC 8 Release Note ,现在可以使用 std::char_traits和 std::char_traits在常量表达式中: Improved experimental suppor
问题How to use correctly the return value from std::cin.get() and std::cin.peek() ?让我想知道是否可以保证 std::ch
在 C++ 中运行代码时,我收到错误 no operator "="matches these operands operand types are std::basic_ostream> = int
两者是等价的,因为它们返回空终止字符序列的长度。有没有理由偏爱其中之一? 最佳答案 使用更简单的替代方法。 std::char_traits::length 非常好,但是对于 C 字符串,它相同并且是
我有这个错误。 no viable conversion from returned value of type 'basic_istream >' to function return
我有一个带有字符串转换运算符的 Foobar 类: #include class Foobar { public: Foobar(); Foobar(const Foobar&);
来自 the answer ,我学会了std::string只是 std::basic_string, std::allocator> 的 typedef , 模板参数替换不考虑用户定义的转换,因此编
我正在尝试使运算符重载 >> 我想从输入中读取每个字符,但我收到了该错误。这是代码: istream& operator>>(istream& input, Natural_Big_Number nu
我在电子表格 obj 中有一堆对: std::stack > undoStack; 我正在尝试弹出堆栈并将其分配给另一对: std::pair change = spreadsheets.at(i).
我正在尝试编写一个程序,要求用户输入文件名,然后打开该文件。当我编译它时,出现以下错误: no matching function for call to std::basic_ofstream >:
There are already questions在 Stackoverflow 上询问 为什么 basic_fstream不起作用。答案说char_traits仅专门用于 char和 wchar
在我一直在做的项目中,我们必须将 Cocoa 通知从 C++ 子项目发送到它上面的主项目。为此,我们构建了一个映射来充当通知的 userInfo 字典的键值存储。 在其中一个项目中,以下代码编译得很好
error: no match for operator >(*&std::cout),((const char*) #include using namespace std; int Contar
我正在学习C++并正在学习教程,但是在入门代码中构建代码时遇到了问题。 这是引发此错误的源代码文件。 #include "linux_parser.h" #include #include #in
error C2440: 'initializing': cannot convert from 'TCHAR [260]' to 'std::basic_string,std::allocator>
首先。我想说,我不是 C++ 程序员。outlook 字符串在 visual studio 2015 中生成错误,并显示标题中的消息。 HWND windowHandle = (HWND)FindPr
我是一名优秀的程序员,十分优秀!