如何运行这个C ++代码?

时间:2014-08-13 10:10:33

标签: c++ c++11 compilation

我正在使用C ++ Primer第5版学习C ++。在练习中,我需要使用C ++中的auto。源代码如下。当我尝试使用它编译时:

g++ stringlength.cpp -o stringlength.exe

它不起作用,并且无法正确识别auto。 但是当我使用:

进行编译时
g++ -std=c++11 stringlength.cpp -o stringlength.exe

它显示了我未见过的完整错误列表。 请告诉我如何成功编译此代码。

源代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str1, str2;
    cout << "Enter a sentence: " << endl;
    getline(cin, str1);
    cout << "Enter another sentence: " << endl;
    getline(cin, str2);
    auto size1 = str1.size();
    auto size2 = str2.size();
    if (size1 == str2)
    {
        cout << "The strings \"" << str1 << "\" & \"" << str2 << "\" are of same length." << endl;
    }
    else if (size1 > size2)
    {
        cout << "The string \"" << str1 << "\" is longer than \"" << str2 << "\"" << endl;
    }
    else 
    {
        cout << "The string \"" << str2 << "\" is greater than \"" << str1 << "\"" << endl;
    }
    cin.get();
    cin.get();
    return 0;
}

第二次错误的片段:

s.h:39,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:40,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
                 from stringlength.cpp:1:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_pair.h:214:5: note: template
<class _T1, class _T2> constexpr bool std::operator==(const std::pair<_T1, _T2>&
, const std::pair<_T1, _T2>&)
     operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
     ^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_pair.h:214:5: note:   templa
te argument deduction/substitution failed:
stringlength.cpp:15:15: note:   mismatched types 'const std::pair<_T1, _T2>' and
 'unsigned int'
  if (size1 == str2)
               ^
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algoba
se.h:67:0,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\char_trait
s.h:39,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:40,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
                 from stringlength.cpp:1:

2 个答案:

答案 0 :(得分:3)

首先,您需要-std=c++11选项,因为在C ++ 11中添加了具有您使用含义的auto。所以第二个命令行没问题。您看到的错误是由行

引起的
if (size1 == str2)

我想你的意思是

if (size1 == size2)

答案 1 :(得分:2)

使用-std=c++11标志进行编译时,您正在正确执行此操作,因为您使用的是支持auto关键字的较新C ++版本。 使用此标志进行编译时,您将收到编译错误 - 这是完全正常的。它告诉您代码存在问题:

您将字符串与unsigned int进行比较,这从以下行中可以看出:

 mismatched types 'const std::pair<_T1, _T2>' and unsigned int'

变量size1已隐式定义,但其为unsigned int。 如果您开始使用C ++和编程,我建议您不要使用auto关键字(隐式而非明确地分配内容),这样您就可以准确地知道要分配的类型生活更容易阅读和调试:

string str1, str2;

// ....

unsigned int size1 = str1.size();
unsigned int size2 = str2.size();
if (size1 == str2)
{
    // Your code here.
}

现在,您可以立即看到您尝试比较类型为str2的{​​{1}}和类型为string的{​​{1}},这显然是您无法做到的。