通用VC++与g ++查询

hal*_*i0n 0 c++ string g++ header visual-c++

我无法理解编译器.以下代码在g ++下的UNIX中可以正常工作,但在VC++下它甚至不能编译.任何人都可以提供有效理由吗?

#include <stdio.h>
#include <iostream>
#include <string.h>


using namespace std;

int main()
{
    string tmp_nw_msg, crc_chksum, buffer;

    cout << "Enter the string : ";
    cin >> buffer;

    if (strlen(buffer.c_str()) >15 ) {
        tmp_nw_msg = buffer.substr(1,12);
        crc_chksum = buffer.substr(13,2);

        cout << " N/W msg : "<< tmp_nw_msg << endl;
        cout << " crc chksum : "<< crc_chksum << endl;
    }
    else {
        cout << "error" << endl;
    }

    std::cin.get();
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

VC++抛出以下错误,但在g ++中它确实可以正常工作.

错误1错误C2679:二进制'>>':找不到哪个运算符采用'std :: string'类型的右手操作数(或者没有可接受的转换)c:\ documents and settings\my documents\visual studio 2005\projects\dummy_substr\dummy_substr\substr.cpp 13
错误2错误C2679:二进制'<<':找不到带有'std :: string'类型的右手操作数的运算符(或者没有可接受的转换)c:\documents和settings\my documents\visual studio 2005\projects\dummy_substr\dummy_substr\substr.cpp 19
错误3错误C2679:二进制'<<':找不到运算符,它接受类型'std :: string的右手操作数'(或者没有可接受的转换)c:\ documents and settings\my documents\visual studio 2005\projects\dummy_substr\dummy_substr\substr.cpp 20
错误4致命错误C1075:在左括号'{'之前找到的文件结尾在'c:\ documents and settings\my documents\visual studio 2005\projects\dummy_substr\dummy_substr\substr.cpp(9)'匹配c:\ documents和settings\my documents\visu al studio 2005\projects\dummy_substr\dummy_substr\substr.cpp 29

g ++的输出:

输入字符串:BD2d1100mayor47E N/W msg:D2d1100mayor crc chksum:47

Gre*_*osz 11

您需要替换#include <string.h>#include <string>

C++标头没有.h扩展名来将它们与具有相同名称的C标头区分开来.

此外,您不需要#include <stdio.h>程序的标题 - 如果您需要从C++程序调用stdio函数,#include <cstio>无论如何.


编辑:"如果那确实是问题,那么错误应该是关于字符串变量的定义",PierreBdR评论说

在MSVC++中,#include <iostream>在某些时候创建一个包含级联#include <stdexcept>.然后,当您查看stdexcept头文件时,您可以看到#include <xstring>.MSVC++的定义和实现std::string确实在这个xstring标题中解释了为什么编译器甚至知道类型 - 尽管你没有#include <string>.

然后,如果您查看string标题的内容,您可以看到这是std::string定义二进制运算符的位置,这解释了为什么错误仅在包含cin >> buffer;语句的行上弹出.

  • 我希望我能为深入的尸检提供+2. (2认同)