2013-03-04 43 views
6

tôi có các dòng sau đây trong một tập tin khá lớn:Crypto ++ đưa ra một lỗi biên dịch trong algparam.h

#include <sha.h> 
#include <hex.h> 

nào, khi biên soạn, ném này lỗi biên dịch:

1>d:\work\app\tools\cryptopp\algparam.h(322): error C2061: syntax error : identifier 'buffer' 
1>   d:\work\app\tools\cryptopp\algparam.h(321) : while compiling class template member function 'void CryptoPP::AlgorithmParametersTemplate<T>::MoveInto(void *) const' 
1>   with 
1>   [ 
1>    T=bool 
1>   ] 
1>   d:\work\app\tools\cryptopp\algparam.h(329) : see reference to class template instantiation 'CryptoPP::AlgorithmParametersTemplate<T>' being compiled 
1>   with 
1>   [ 
1>    T=bool 
1>   ] 

Tôi khá chắc chắn tôi đang quên một cái gì đó, nhưng tôi không chắc chắn những gì. Nếu tôi không bao gồm hex.h, tôi không có bất kỳ vấn đề và tôi nhận được một băm SHA256 tốt, nhưng khi tôi bao gồm hex.h, lỗi sẽ xuất hiện.

Sửa

Trong trường hợp ai thắc mắc, từ algparam.h của Crypto ++ toolkit:

void MoveInto(void *buffer) const //<=== line 320 
{ 
    AlgorithmParametersTemplate<T>* p = new(buffer) 
    AlgorithmParametersTemplate<T>(*this); 
} 

CRYPTOPP_DLL_TEMPLATE_CLASS AlgorithmParametersTemplate<bool>; // <== line 329 

Sửa: Mã liên quan Removed

+0

Đây có phải là toàn bộ văn bản lỗi không? Có lỗi nào khác không? Có bất kỳ liên kết nào giữa mã của 'InitEngine' mà bạn trích dẫn và lỗi này không? Các văn bản lỗi không tham chiếu nó, hoặc bất cứ điều gì bên trong nó. Liệu lỗi vẫn xảy ra khi bạn nhận xét 'InitEngine' ra? –

+0

Không, không có mã nào tham chiếu hàm 'MoveInto' này. Tuy nhiên, hex.h dường như bao gồm basecode.h, bao gồm algparam.h. Có vẻ như bất cứ khi nào algparam.h được bao gồm, nó không thành công. – Codecat

+0

Và có, nó vẫn xảy ra nếu tôi nhận xét mã trong 'InitEngine'. – Codecat

Trả lời

6

tôi khắc phục vấn đề bằng cách tạm thời undefining new , được định nghĩa là macro đối với một số mã gỡ lỗi bổ sung.

#pragma push_macro("new") 
#undef new 
/* #includes for Crypto++ go here */ 
#pragma pop_macro("new") 
1

Nếu bạn bao gồm Crypto ++ trong một dự án Visual Studio với sự hỗ trợ MFC, lỗi này có thể được gây ra bởi dòng này:

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

Hãy chắc chắn để xoá bỏ nó hoặc nhận xét nó ra.

+0

Loại bỏ các dòng khỏi tiêu đề MFC không phải là một ý tưởng hay. – Codecat

+0

@AngeloGeels: Dòng đó không nằm trong tiêu đề MFC. Nó được thêm vào các tệp '.cpp' được tạo bởi trình hướng dẫn MFC. – c00000fd

+0

Ah, tôi hiểu - vẫn còn, có thể không phải là một ý kiến ​​hay nếu nhận xét nếu câu trả lời của tôi ở trên cũng khắc phục được sự cố. – Codecat

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