2011-12-16 25 views
5

Tôi hiện đang làm việc trên một dự án ngăn cấm việc đưa vào thư viện chuẩn của C++. Một trong những tệp được biên dịch mà chúng tôi đang sử dụng liệt kê biểu tượng sau: _Xran__Q2_3std12_String_baseCFvXác định nguồn của một biểu tượng được bao gồm trong C++

Tôi tin rằng điều này liên quan đến chuỗi thư viện chuẩn. Tôi có nghĩ không chính xác như vậy không? Nếu không, có ai nhận thức được một cách hiệu quả để truy tìm điểm mà biểu tượng này đã được đưa vào không? Một tìm kiếm cursory của cơ sở mã không hiển thị bất cứ điều gì rõ ràng.

+0

Điều đó có vẻ giống như một tên bị cắt xén cho một cái gì đó liên quan đến 'std :: _ String_base'. Trước khi bạn đi trích dẫn tôi, mặc dù, biết rằng tôi không có ý tưởng làm thế nào VS mangles tên. – cHao

+0

Bạn có biết tệp đối tượng nào trong đó và cần phải tìm '# include' nào chịu trách nhiệm hoặc bạn đang cố gắng tìm tệp đối tượng không? –

+0

xem câu hỏi này: http://stackoverflow.com/questions/5310590/build-problem-in-visual-studio-2010 –

Trả lời

2

Điều này dường như không phải là VC mangling, luôn bắt đầu bằng dấu chấm hỏi.

Nó, tuy nhiên, phù hợp với G ++ mangling chương trình, như được gợi ý bằng cách chạy

$ c++filt --format=gnu "_Xran__Q2_3std12_String_baseCFv" 
std::_String_base::_Xran(const(void)) 

Có gì lạ là _Xran dường như là một phần của thực VC cho std::string.

Dù sao, tiêu đề bạn đang tìm kiếm có lẽ là #include <string>.

EDIT: Kết quả của đầu ra C++ filt - bạn có chắc là nó được biên dịch trong VC++ không?

+1

Cho rằng hầu hết các thư viện chuẩn C++ mượn một lượng lớn từ phiên bản SGI gốc của STL, nó không thực sự đáng ngạc nhiên khi tìm cùng tên '_Xran' trong cả VC và C++. –

+0

Sợ tôi không nhận ra từ viết tắt VC. Bạn có thể làm rõ? – Greg

+0

VC = Visual C/C++; trình biên dịch C++ trong gói Visual Studio. – user1071136

0

Trong trường hợp string.h thực sự là bao gồm ở một số nơi, bạn có thể tìm ra nơi:

Place ở dòng tiếp theo sau mỗi #include thị đoạn mã sau:

using namespace std;class string;struct{void hxtestfunc(void){typedef string hxtesttype;}}; 

Khi biên dịch, điều này sẽ tạo ra một lỗi "biểu tượng mơ hồ" chỉ khi string.h (hoặc bất kỳ tệp nào bao gồm string.h trực tiếp hoặc gián tiếp) được bao gồm ở đâu đó trước đây.

Vì vậy, báo cáo "biểu tượng mơ hồ" báo cáo đầu tiên sẽ dẫn bạn đến dòng ngay sau khi đưa vào quan trọng.

Trong Visual C++ bạn có thể sử dụng tìm kiếm & thay thế với biểu thức chính quy:

Thay

"{. # Include *}"

với

"\ 0 \ NUSING namespace std ; chuỗi lớp; struct {void htestfunc (void) {typedef chuỗi htesttype;}}; "

trong toàn bộ dự án.

+0

'' là một tiêu đề C. Có thể bạn đang nói về ' '. – cHao

+0

Đó là độc đáo nền tảng độc lập, nhưng đáng sợ lao động chuyên sâu để bác sĩ mỗi #include. Fiendishly thông minh, nhấn mạnh vào fiendish. – Greg

Các vấn đề liên quan