vs2010报错_有关信息和数据的说法错误的是

vs2010报错_有关信息和数据的说法错误的是错误信息:fatalerrorC1083:无法打开包括文件:“iostream.h”:Nosuchfileordirectory造成这个错误的原因在于历史原因,在过去C++98标准尚未订立的时候,C++的标准输入输出

错误信息:
fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or directory

        造成这个错误的原因在于历史原因,在过去C++98标准尚未订立的时候,C++的标准输入输出流确实是定义在这个文件里面的,这是C风格的定义方法,随着C++98标准的确定,iostream.h已经被取消,至少在VC2010下面是这样的,取而代之的是我们要用<iostream>头文件来代替,你甚至可以认为<iostream>是这样定义的:

      namespace std

      {

              #include “iostream.h”

     }

     因此我们可以简单的修改我们的Hello World。

     #include <iostream>
using namespace std;

int main()
{

cout<<“Hello World.”<<endl;

return 0;
}

       iostream.h是属于C++的头文件,而非C的,因此标准订立的时候被改成了<iostream>。而C的头文件stdio.h等依然可以继续使用,这是为了兼容C代码。但是它们依然有对应的C++版本,如<cstdio> <cstdlib>等。记住,在VC2010上面采用C++风格的头文件而不是C风格的头文件,除非你是在用C。

重定义的编译错误和链接错误

     让我们在项目里面再添加一个Test.h头文件,方法是右击解决方案中的项目,添加,新建项,C++头文件,名称输入test.h。然后我们在test.h中输入:

/*#pragma once*/

void print()
{

}

      回到main.cpp中:

#include <iostream>

using namespace std;

#include “Test.h”
#include “Test.h”

int main()
{

return 0;
}

     编译一下我们会得到重定义的编译错误:

            error C2084: 函数“void print(void)”已有主体

     或许你会说,你引用(#include)了两次,我没你那么傻,我只引用一次不就好了么?是的。你聪明,但是是小聪明哈,因为你不能保证每个人都不去引用它。

     这个问题演示的是#pragma once的用处,让我们解开它的注释。编译成功!#pragma once的作用就在于防止头文件被多次引用。你或许见过

#ifndef __TEST_H__

#define__TEST_H__

代码

#endif

    这样的代码,它们的作用是一样的,如果你跟我一样懒,那么就用#pragma once,如果你打算去没有这个指令的编译器上编译代码,那么还是用后面一种方式吧

1.内联,把print声明为内联函数。

          inline void print()
         {

          }

          这个方法的好处是简单,坏处是局限性太强,意味着你总是需要公开print的实现,因为内联函数必须在编译时就知道实现才行。

      2.static,把print声明为static函数:

         static void print()。

         这便告诉编译器,哥是唯一的,而且哥只能被本编译单元的代码调用,这和extern是对应的。简单来说,想要哥帮你做事,请先include哥声明的头文件,也就是#include “test.h”。

      3..h头文件中只放声明,实现放到.cpp中去。

          现在test.h中只有void print();,而实现在test.cpp中:

        #include “Test.h”

       void print()
       {

            int a = 1;

            cout<< a++ << endl;
       }

         这个时候有意思的是我们在main.cpp无需包含test.h头文件也可以引用print函数,因为print并非static的函数:

void print();

int main()
{

print();
print();

return 0;
}

今天的文章
vs2010报错_有关信息和数据的说法错误的是分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/89757.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注