如何修复仅在使用名称空间时发生的错误C2664
How to fix error C2664 which only occurs when namespaces used
我得到这个错误:
main.cpp(10) : error C2664: 'lr::codec::codec(protocol_decoder *)'
: cannot convert parameter 1 from 'proto::protocol_decoder *' to 'protocol_decoder *'
如果我删除proto命名空间的使用,那么这个错误就会消失。如何解决这个问题,并且仍然保留proto命名空间的使用?
代码如下:
main.cpp:
#include "protocol_decoder_a.hpp"
#include "codec.hpp"
int main() {
//factory function create protocol decoder
proto::protocol_decoder* pro = new proto::protocol_decoder_a;
lr::codec cdc(pro);
return 0;
}
codec.hpp:
#ifndef __CODEC_HPP__
#define __CODEC_HPP__
#include <map>
#include <string>
class protocol_decoder;
//log replay namespace
namespace lr {
typedef bool (*c_f)(const char* id, unsigned char* rq, size_t rq_length, unsigned char*& response, size_t& resp_len);
// generic codec interface will use specific
class codec {
public:
codec(protocol_decoder* decoder);
~codec() {}
bool get_response(const char* id, unsigned char* rq, size_t rq_length, unsigned char*& response, size_t& resp_len);
const char* get_monitored_dn(const char* id, unsigned char* rq, size_t rq_length);
void load_msgs_from_disk();
protocol_decoder* decoder_;
};
} //namespace lr
codec.cpp:
#include "codec.hpp"
using namespace lr;
codec::codec(protocol_decoder* decoder) : decoder_(decoder) {
load_msgs_from_disk();
}
void codec::load_msgs_from_disk() {
//use specific protocol decoder here
}
bool codec::get_response(const char* id, unsigned char* rq, size_t rq_length, unsigned char*& response, size_t& resp_len) {
return true;
}
const char* codec::get_monitored_dn(const char* id, unsigned char* rq, size_t rq_length) {
return 0;
}
protocol_decoder.hpp:
#ifndef __PROTOCOL_DECODER_HPP__
#define __PROTOCOL_DECODER_HPP__
namespace proto {
enum id_type { UNKNOWN_ID, INT_ID, STRING_ID };
struct msg_id {
msg_id() : type(UNKNOWN_ID) {}
id_type type;
union {
const char* s_id;
size_t i_id;
};
};
class protocol_decoder {
public:
virtual const char* get_monitored_dn(unsigned char* msg, size_t msg_len) = 0;
virtual bool get_response(unsigned char* rq, size_t rq_len, unsigned char* response, size_t resp_len) = 0;
virtual bool get_msg_id(unsigned char* rq, size_t rq_len, msg_id id) = 0;
};
} //namespace proto
#endif //__PROTOCOL_DECODER_HPP__
protocol_decoder_a.hpp:
#ifndef __PROTOCOL_DECODER_A_HPP__
#define __PROTOCOL_DECODER_A_HPP__
#include "protocol_decoder.hpp"
namespace proto {
class protocol_decoder_a : public proto::protocol_decoder {
public:
virtual const char* get_monitored_dn(unsigned char* msg, size_t msg_len);
virtual bool get_response(unsigned char* rq, size_t rq_len, unsigned char* response, size_t resp_len);
virtual bool get_msg_id(unsigned char* rq, size_t rq_len, proto::msg_id id);
};
} //namespace proto
#endif //__PROTOCOL_DECODER_A_HPP__
protocol_decoder_a.cpp:
#include "protocol_decoder_a.hpp"
using namespace proto;
const char* protocol_decoder_a::get_monitored_dn(unsigned char* msg, size_t msg_len) {
//specific stuff here
return 0;
}
bool protocol_decoder_a::get_response(unsigned char* rq, size_t rq_len, unsigned char* response, size_t resp_len) {
return true;
}
bool protocol_decoder_a::get_msg_id(unsigned char* rq, size_t rq_len, proto::msg_id id) {
return true;
}
您意外地声明了两个protocol_decoder
类。一个在全局命名空间,一个在proto
命名空间。
修改声明:
class protocol_decoder;
:
namespace proto
{
class protocol_decoder;
}
相关文章:
- 为什么这个错误变成(C2664错误C ++ Visual Studio)
- 编译方面的问题.错误E0413、E0434、C2664、C2440
- 使用解算器SparseLU并获得错误C2664
- std::映射导致插入时出现C2664错误
- VS 2017 错误 C2664 地图插入尝试
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 编译器错误 C2664 使用 std::map 和自定义类作为其值
- 如何在 VC++ 中通过引用传递另一个对象的方法(错误 C2664)
- C2664 :当我使用 str.append(str[i]) 时,发生错误
- 在C++中构造模板函数时出现编译错误 C2664 和 C2440
- 了解错误 C2664:无法转换参数 1
- 错误 C2664:无法从'NvPhysicalGpuHandle'转换参数 1
- 错误 C2664 和 E0167 被难倒
- 尝试创建unique_ptr时出现错误 C2664
- E0312,C2664尝试将向量对象作为函数参数传递时错误
- 错误 C2664:"errno_t wcstombs_s(size_t *,字符 *,size_t,常量 wchar_t *,size_t)":无法转换参数 4
- 错误C2664:无法转换参数错误
- 在集合中转换为小写 C++ 错误 C2664
- C2664错误,C++,这对我来说是外来的
- vector迭代的派生和基之间的类型转换:C2664错误