Это мой пример кода:
#include <iostream>
#include <string>
using namespace std;
class MyClass
{
string figName;
public:
MyClass(const string& s)
{
figName = s;
}
const string& getName() const
{
return figName;
}
};
ostream& operator<<(ostream& ausgabe, const MyClass& f)
{
ausgabe << f.getName();
return ausgabe;
}
int main()
{
MyClass f1("Hello");
cout << f1;
return 0;
}
Если я закомментирую #include <string>
, я не получу никаких ошибок компилятора, я полагаю, потому что это вроде как включено через #include <iostream>
. Если я щелкну правой кнопкой мыши -> Перейти к определению в Microsoft VS, они оба будут указывать на одну и ту же строку в файле xstring
:
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
Но когда я запускаю свою программу, я получаю ошибку исключения:
0x77846B6E (ntdll.dll) в OperatorString.exe: 0xC00000FD: переполнение стека (параметр: 0x00000001, 0x01202FC4)
Есть идеи, почему я получаю сообщение об ошибке выполнения при комментировании #include <string>
? Я использую VS 2013 Express.
#include<iostream>
и<string>
могут включать<common/stringimpl.h>
. - person MSalters   schedule 02.05.2017...\main.cpp(23) : warning C4717: 'operator<<': recursive on all control paths, function will cause runtime stack overflow
при запуске этой строкиcl /EHsc main.cpp /Fetest.exe
- person CroCo   schedule 02.05.2017/W1
- person cbuchart   schedule 03.05.2017