在C ++程序中使用iostream.h的问题

时间:2013-04-30 20:10:19

标签: c++ compilation iostream

我需要执行此页面中的一些示例: http://www.chuidiang.com/clinux/ipcs/colas.php

其中一个的代码就是这个:

#include <iostream.h>
#include <sys/msg.h>
#include <errno.h>

typedef struct Mi_Tipo_Mensaje
{
long Id_Mensaje;
int Dato_Numerico;
char Mensaje[10];
};

main()
{
key_t Clave1;
int Id_Cola_Mensajes;
Mi_Tipo_Mensaje Un_Mensaje;

Clave1 = ftok ("/bin/ls", 33);
if (Clave1 == (key_t)-1)
{
    cout << "Error al obtener clave para cola mensajes" << endl;
    exit(-1);
}

Id_Cola_Mensajes = msgget (Clave1, 0600 | IPC_CREAT);
if (Id_Cola_Mensajes == -1)
{
    cout << "Error al obtener identificador para cola mensajes" << endl;
    exit (-1);
}

Un_Mensaje.Id_Mensaje = 1;
Un_Mensaje.Dato_Numerico = 29;
strcpy (Un_Mensaje.Mensaje, "Hola");

msgsnd (Id_Cola_Mensajes, (struct msgbuf *)&Un_Mensaje, 
        sizeof(Un_Mensaje.Dato_Numerico)+sizeof(Un_Mensaje.Mensaje), 
        IPC_NOWAIT);

msgrcv (Id_Cola_Mensajes, (struct msgbuf *)&Un_Mensaje,
        sizeof(Un_Mensaje.Dato_Numerico) + sizeof(Un_Mensaje.Mensaje), 
        2, 0);

cout << "Recibido mensaje tipo 2" << endl;
cout << "Dato_Numerico = " << Un_Mensaje.Dato_Numerico << endl;
cout << "Mensaje = " << Un_Mensaje.Mensaje << endl;

msgctl (Id_Cola_Mensajes, IPC_RMID, (struct msqid_ds *)NULL);
    }

我正在尝试按照我提到的页面(“make”或“g ++ cola1.c -o cola1”)中的建议编译它,但我收到此消息:

fatal error: iostream.h: No such file or directory

我知道这个问题已经被问了很多,但我还是解决不了,你能不能给我一些见解? 感谢您的时间和性格,

SebastiánPavez

2 个答案:

答案 0 :(得分:3)

您的代码中存在许多问题。

  1. iostream.h不属于C ++标准,您应该导入iostream
  2. 您永远不会将std命名空间添加到相应的函数中。您只需在程序开头添加行using namespace std;(尽管不鼓励这样做,请查看您最喜欢的参考,在std命名空间中使用 live 功能并在{{1}前面添加它们})。
  3. 普通std::错误,必须返回main()。将其更改为int,并在int main()函数的末尾添加第main行。正如 Joachim Pileborg 在评论中所建议的那样,你可以省略return语句,因为如果缺少它,编译器会添加它。
  4. 您使用在标题文件return 0cstring)和strcpycstdlib)中声明的函数,因此请包含它们:

    exit
  5. #include <cstring> #include <cstdlib> 中的typedef是多余的,不是必需的。删除它。
  6. BTW:代码中的很多内容都表明你正在编写一个C ++程序而不是C程序。

答案 1 :(得分:0)

C ++标准头文件名不以.h结尾。只需使用#include <iostream>