cout不是std的成员。

260
我正在练习使用多个文件和头文件等。所以我有这个项目,它接收两个数字然后将它们相加。非常简单。
以下是我的文件:

main.cpp

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

int main()
{
    int x = readNumber();
    int y = readNumber();

    writeAnswer(x + y);

    return(0);
}

io.cpp

int readNumber()
{
    int x;

    std::cout << "Number: ";
    std::cin >> x;

    return x;
}

void writeAnswer(int x)
{
    std::cout << "Answer: ";
    std::cout << x;
}

add.h

#ifndef ADD_H_INCLUDED
#define ADD_H_INCLUDED

int readNumber();
void writeAnswer(int x);

#endif // #ifndef ADD_H_INCLUDED

错误出现在io.cpp中。具体的错误如下:

enter image description here

有人知道这可能是为什么吗?谢谢。
编辑:昨天我做了一个小项目,包含同样数量的文件(2个.cpp和1个.h),在另一个.cpp中没有包含iostream头文件,但它仍然编译并运行良好。

4
关于您的修改:那么您以不同的方式编译了该项目。在第二个 cpp 文件中包含 iostream,正如您在这里所做的那样,是必需的。也许你上次在 .h 文件中包含了那个头文件。 - Mat
是的,现在它运行得非常好,感谢大家的快速响应! :) - Paul Hannon
2
请在本地文件之后包含系统头文件。 - Vincent
3个回答

428

也要在 io.cpp 的开头添加 #include <iostream>


6
必须包含iostream库(直接或间接地)。否则编译器怎么知道在哪里找到std :: cout。 - A. K.
1
我理解你的意思,谢谢。不过我的另一个项目怎么能在其他 .cpp 文件中没有包含它的情况下工作呢?我在底部更新了 OP。 - Paul Hannon
2
你可能已经间接地包含了它。它是绝对必需的。 - Sebastian Hoffmann
2
我需要在.h文件中也包含它!谢谢 - user391339
4
必须在stdafx.h之后包含它,而不是在之前。 - Alex

26

如果您正在使用Microsoft的编译器(MSVC)与预编译头文件,请记住它必须是:

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

并且不是相反的情况:

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

换句话说,预编译头文件必须始终位于最前面。(如果您忘记了,编译器应该会明确解释这一点并给出错误提示。)


1

我曾经遇到过类似的问题,后来发现需要在cmake中添加额外的条目以包含这些文件。

由于我还使用了zmq库,因此还需要将其添加到所包含的库中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接