【发布时间】:2015-11-03 01:16:20
【问题描述】:
Eclipse IDE 在下一行向我抛出一个错误,即“方法'get' 无法解析”。确切的错误信息是
Method 'get' could not be resolved, Location: line xxx, Type: Semantic Error
错误行:
const TagValue* tagValue = ((*mktDataOptions)[i]).get();
这里出了什么问题?这段代码是作为 API 提供给我的,所以想必其他人之前已经使用过它。类似的错误在给我的代码中出现了大约 8 次,我很难相信它在 8 次不同的时间中以相同的方式编码错误。
问题
有人可以为我解析这条线并准确解释它想要做什么吗?
为什么我的 Eclipse 对所有这些实例都抛出错误,如何解决?
相关代码
函数中存在这一行:
void EClient::reqMktData(TickerId tickerId, const Contract& contract,
const std::string& genericTicks, bool snapshot, const TagValueListSPtr& mktDataOptions)
...
if( m_serverVersion >= MIN_SERVER_VER_LINKING) {
std::string mktDataOptionsStr("");
const int mktDataOptionsCount = mktDataOptions.get() ? mktDataOptions->size() : 0;
...
const TagValue* tagValue = ((*mktDataOptions)[i]).get();
其中“TagValueListSPtr”在标头中定义为
struct TagValue
{
TagValue() {}
TagValue(const std::string& p_tag, const std::string& p_value)
: tag(p_tag), value(p_value)
{}
std::string tag;
std::string value;
};
typedef shared_ptr<TagValue> TagValueSPtr;
typedef std::vector<TagValueSPtr> TagValueList;
typedef shared_ptr<TagValueList> TagValueListSPtr;
而“shared_ptr”被定义为
template<typename X> class shared_ptr {
public:
typedef shared_ptr_defs::Use Use;
template<typename Y> friend class shared_ptr;
explicit shared_ptr(X* ptr = 0) : ptr_(ptr) {}
~shared_ptr() { if (use_.only()) delete ptr_; }
template<typename Y>
shared_ptr(const shared_ptr<Y>& other)
: ptr_(other.ptr_),
use_(other.use_)
{}
shared_ptr& operator=(const shared_ptr& other) {
if ( &use_ == &other.use_ ) { return *this; }
if ( use_.only() ) { delete ptr_; }
use_ = other.use_;
ptr_ = other.ptr_;
return *this;
}
X& operator*() const { return *ptr_; }
X* operator->() const { return ptr_; }
X* get() const { return ptr_; }
bool only() const { return use_.only(); }
void reset(X* ptr = 0) {
if ( use_.only() ) { delete ptr_; }
ptr_ = ptr;
use_ = Use();
}
private:
X *ptr_;
Use use_;
};
【问题讨论】:
-
你能添加确切的错误信息吗?这听起来像是一个链接器错误。
-
....虽然
get是内联的,所以这可能不是问题。 -
*表示取消引用指针。*mktDataOptions是指向的对象(它是一个向量)。mktDataOptions是指针。(*mktDataOptions)[i]访问向量的ith 成员。 -
我在代码块的顶部添加了来自 Eclipse 的确切消息(请忽略着色)。不确定它有多大帮助。
-
很多...这是来自 Eclipse 的错误消息,而不是编译器。话虽如此,它编译了吗? (然后跑?)