Eclipse IDE在以下行中给我一个错误,"方法' get'无法解决"。确切的错误消息是
Send: //Called when button is pressed
(1) Get String from editText into MSG
(2) Run AsyncTask_SEND(MSG).executeOnExecutor(...) to send
(this procedure avoids internet calls at main thread (NetworkOnMainThreadException))
(3) TextView.setText( TextView.getText() + "Local : " + MSG + "\n" );
Get: //Called at onCreate
Run AsyncTask_GET().executeOnExecutor(...) to get messages.
It's doInBackground works like this:
| (1) Declare String MSG
| (2) While client still has messages to send (kind of infinite loop):
| | (2.1) Get client's next line into MSG
| | (2.2) TextView.setText( TextView.getText() + "Remote : " + MSG + "\n" );
错误行:
Method 'get' could not be resolved, Location: line xxx, Type: Semantic Error
这里出了什么问题?这段代码是作为API提供给我的,所以大概是其他人之前使用过它。类似的错误在我给出的代码中出现了大约8次,我很难相信它在8次单独的时间以相同的方式编码错误。
问题
有人可以为我解析这一行并准确解释它想要做什么吗?
为什么我的Eclipse会为所有这些实例抛出错误以及如何修复它?
相关代码
该行存在于函数中:
const TagValue* tagValue = ((*mktDataOptions)[i]).get();
Where" TagValueListSPtr"在标题中定义为
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();
" shared_ptr"定义为
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;
答案 0 :(得分:1)
有人可以为我解析这一行并准确解释它想要做什么吗?
/* A pointer (to a const qualified TagValue) */
const TagValue*
/* named */ tagValue
/* is initialised to the result of */ = ((
/* dereferencing */ *
/* the shared pointer */ mktDataOptions)
/* which points to a vector */
/* and calling operator[] on it */ [i])
/* which returns the reference to */
/* a shared pointer to a TagValue */
/* whose */ .get();
/* member function is called, returning /*
/* as final result a pointer to a TagValue */
这实际上是一个非常复杂的设计,关于所有权(涉及很多共享指针),这就是为什么我怀疑这实际上是需要的,但很好。
mktDataOptions
是指向包含TagValue
的共享指针的向量的共享指针。因此,要获取指向TagValue
的指针,需要使用shared_ptr::operator*()
取消引用指向该向量的指针,请使用其i
选择该向量的元素(std::vector::operator[]()
th) 。这是指向TagValue
的共享指针,因此要获取基础指针,应用成员函数shared_ptr::get()
。
您可以将其重写为......
// using references, otherwise you make copies,
// which changes the meaning of the code.
// Get the vector from the shared pointer
std::vector<shared_ptr<TagValue>> & the_vector = *mktDataOptions;
// get a single element from it
shared_ptr<TagValue> const & the_element = the_vector[i];
// get it's underlying pointer
TagValue * the_pointer = the_element.get();
// it's a pointer to a non const TagValue, which can be
// converted to a pointer to a const TagValue (the type of the variable
// which gets initialised)
TagValue const * tagValue = the_pointer;
为什么我的Eclipse会为所有这些实例抛出错误以及如何修复它?
[...]这是一个Eclipse错误我应该随意忽略吗?我还是想摆脱它。
从某些研究看来,它似乎是一个日食错误,可以通过删除workspace/.metadata
来解决,但我需要注意的是,我不是eclipse用户,所以我无法验证或推荐一些可能的解决方案。
在您的情况下,我会复制工作区和项目目录,然后开始尝试以下建议:
但从这些问题来看,似乎这是一个相对奇怪的错误,所以准备一些挫折感。