当前位置: 首页 > 知识库问答 >
问题:

STD::oStream识别不定义报头

薛宏壮
2023-03-14

我创建了以下代码:

#include <iostream>
#include "Quote.h"

int main()
{
    derived().print(std::cout);

    getchar();
    return 0;
}
#pragma once
#include <string>

class base {
public:
    std::string name() { return basename; }
    virtual void print(std::ostream &os) { os << basename; }

private:
    std::string basename = "abc";
};

class derived : public base {
public:
    void print(std::ostream &os) { base::print(os); os << " " << i; }

private:
    int i = 0;
};

如果我没有像预期的那样在main.cpp中包含iostream头文件,则无法识别STD::Cout。我的问题是:如果不包括iostream,为什么在quote.h中使用std::oStream没有问题?。在前面提到的库中,将cout定义为ostream,为什么cout的使用是一个问题而ostream不是?

我使用VS2017,以防这些信息很重要。

共有1个答案

仲孙宇定
2023-03-14

标头 使用std::ostream声明一个输出运算符。您所使用的实现似乎在某种程度上使std::ostream普遍可用。

C++标准定义了哪些头使哪些声明至少可用。它并不禁止提供额外的名称。不同的实现可以选择不使声明可用。我尝试在我的实现中严格地只提供强制声明,但这并不像听起来那么简单。

 类似资料:
  • 我想这样使用std::ostream: 有一个错误,说ostream构造函数受到保护: 错误:'std::basic_ostream 但我记得

  • 我在下面的某个地方看到了代码片段。 由于前面提到的代码片段工作得很好,它表明std::cout是从std::ostream派生而来的。但我还找不到任何直接的参考资料。 根据文件,其中说[强调我的]: 全局对象std::cout和std::wcout控制输出到实现定义类型的流缓冲区(源自std::stream buf),与标准C输出流stdout相关联。 上面的引文表示,控制输出到派生自std::s

  • 我不能为一个项目用cucumber执行简单的测试。我在Intellij13社区,使用cucumber插件。 我在features目录中编写了我的features文件,我还通过插件实现了创建它们的步骤。intellij可以识别功能文件中的我的步骤,它可以导航并转到步骤实现。当我尝试运行我的场景时,if无法声明“未定义的步骤”。任何帮助都将不胜感激。 以下是我如何组织我的项目:

  • 问题内容: 有什么好的方法可以帮助您识别项目中未使用的CSS定义?一堆css文件被拉进来了,现在我正在尝试清理一些东西。 问题答案: Chrome开发者工具有一个“ 审核”标签,其中可以显示未使用的CSS选择器。 运行审核,然后在“ 网页性能”下,参阅“ 删除未使用的CSS规则”

  • 我正在尝试为产品名称及其型号构建一个自定义命名实体提取器。 我的用例包含这样的句子:“微软使用了ABC-300产品,并将其与ASQ集成”。上述句子中提到的产品是:ABC-300和ASQ 我已经尝试使用Stanford和Spacy NER,两者的准确性都低于预期。 是否有任何数据集包含段落或句子中的产品名称,我可以用于训练自定义NER模型?训练的句子可以简单也可以复杂。任何类型的数据都很有用。 关于

  • 我从我的教授那里得到了这个样本溶液,但不知怎么的它不起作用。IntelliJ无法识别包。每堂课都是这样。当我悬停在它上面时,它说:“包名'spaceman.view.util'不对应于文件路径'view.util'”有没有人知道什么是错误的?我是一个完全的初学者,当谈到编码,所以很抱歉,如果这个问题是平庸的。 谢谢!!