Đây là mã mẫu của tôi:
#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;
}
Nếu tôi nhận xét ra, #include <string>
tôi không gặp bất kỳ lỗi trình biên dịch nào, tôi đoán là vì nó được đưa vào thông qua #include <iostream>
. Nếu tôi "nhấp chuột phải -> Đi tới Định nghĩa" trong Microsoft VS thì cả hai đều trỏ đến cùng một dòng trong xstring
tệp:
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
Nhưng khi tôi chạy chương trình của mình, tôi gặp lỗi ngoại lệ:
0x77846B6E (ntdll.dll) trong OperatorString.exe: 0xC00000FD: Tràn ngăn xếp (Tham số: 0x00000001, 0x01202FC4)
Bất kỳ ý tưởng tại sao tôi gặp lỗi thời gian chạy khi bình luận #include <string>
? Tôi đang sử dụng VS 2013 Express.
#include<iostream>
và <string>
cả hai có thể bao gồm <common/stringimpl.h>
.
...\main.cpp(23) : warning C4717: 'operator<<': recursive on all control paths, function will cause runtime stack overflow
khi chạy dòng nàycl /EHsc main.cpp /Fetest.exe