これは私のサンプルコードです:
#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>
です。私の場合、「右クリック- >定義に移動し、」マイクロソフトVSにおけるこれらの同じ行に両方のポイントxstring
のファイル:
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
しかし、プログラムを実行すると、例外エラーが発生します。
OperatorString.exeの0x77846B6E(ntdll.dll):0xC00000FD:スタックオーバーフロー(パラメーター:0x00000001、0x01202FC4)
コメントアウトするとランタイムエラーが発生するのはなぜ#include <string>
ですか?VS 2013 Expressを使用しています。
#include<iostream>
と<string>
の両方が含まれる場合があります<common/stringimpl.h>
。
...\main.cpp(23) : warning C4717: 'operator<<': recursive on all control paths, function will cause runtime stack overflow
この行を実行すると警告が表示されますcl /EHsc main.cpp /Fetest.exe