eclipse C++ 中无法识别受保护的成员
Posted
技术标签:
【中文标题】eclipse C++ 中无法识别受保护的成员【英文标题】:Protected member not recognized in eclipse C++ 【发布时间】:2012-11-23 11:26:19 【问题描述】:我有以下类,我尝试访问基类的受保护成员,但在 eclipse 中出现错误“无法解析字段分解”。有人可以向我解释我做错了什么吗?为什么我无法访问变量mFactorized
??
基类
template <typename ValueType>
class AbstractDirectLinearSolver
protected:
bool mFactorized;
public:
//Constructors, destructor
AbstractDirectLinearSolver()
mFactorized = false;
virtual ~AbstractDirectLinearSolver();
//Methods
virtual void Solve(Vector<ValueType>& x, const Vector<ValueType>& b) const = 0;
virtual void Factorize(AbstractMatrix<ValueType>& A) = 0;
;
派生类
#include "AbstractDirectLinearSolver.hpp"
template<typename ValueType>
class CholeskySolver: public AbstractDirectLinearSolver
private:
AbstractMatrix<ValueType> *mR; //Pointer = Abstract class NOT ALLOWS instantiation !!
public:
CholeskySolver()
mR = NULL;
~CholeskySolver()
if (this->mFactorized) //ERROR HERE
delete mR;
void Solve(const Vector<ValueType>& x, const Vector<ValueType>& b)
Vector<ValueType> y(mR->ApplyLowInv(b));
x = mR->ApplyLowerTransponse(y);
void Factorize(AbstractMatrix<ValueType>& A)
if (mR != NULL)
delete mR;
mR = NULL;
A.CholeskyFactorization(mR);
this->mFactorized; //ERROR HERE
;
【问题讨论】:
您是否真的从两行中都得到了错误,或者只是第一行您忘记了变量名上奇怪的伪匈牙利疣 (m
)?如果是这样,第二个错误到底是什么?
第一次忘记把m
放在Factorized
之前。更改后,eclipse 用Field mFactorized could not be resolved
标记这些行
所以这不是编译问题?是 IDE 问题?
你的编译器是在抱怨,还是只是 Eclipse?
嗯,我认为这是一个IDE问题,因为我编译它并且没有错误。
【参考方案1】:
您正在尝试从类模板而不是类继承。将类头改为:
template<typename ValueType>
class CholeskySolver: public AbstractDirectLinearSolver<ValueType>
^^^^^^^^^^^
在抱怨mFactorized
不是成员(因为它不知道基类)之后,编译器似乎退出了,但在抱怨基类说明符无效之前。
如果您要注释掉有问题的行,那么您会得到一个稍微好一点(尽管仍然相当混乱)的错误:expected class-name before ‘’ token
。
【讨论】:
非常感谢。是的,实际上我没有考虑到这一点。有时我对模板感到困惑。 不错的收获 - @BRabbit27 很容易错过 - 我猜 Eclipse 是一个很好的 IDE,因为它一直在抱怨。【参考方案2】:if (this->Factorized)
应该是
if (this->mFactorized)
第二个错误...
this->mFactorized; //ERROR HERE
除了它没有做任何事情之外......我认为应该没有问题。
【讨论】:
是的,第一个是拼写错误,但是 Eclipse 一直将其标记为错误,上面写着Field Factorized could not be resolved
。我认为没有问题,但为什么它被标记为一个?
如果您错过了this->
部分,它是否仍然突出显示?也可能需要重新索引。除此之外,恐怕我不太了解 Eclipse。以上是关于eclipse C++ 中无法识别受保护的成员的主要内容,如果未能解决你的问题,请参考以下文章