我正在使用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:
答案 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}},这显然是您无法做到的。