对象 ** 到对象 * 之间的融合
Converation between object ** to object*
>我想知道为什么我的变量是指针到指针的类型(**) 而不仅仅是 1 分。
错误是:
无法将"单项式**"转换为"单项式* const"作为回报
为什么会这样?
我的头文件:
class Polynomial
{
private:
Monomial * poly_array [];
int poly_counter;
public:
Polynomial();
~Polynomial();
Monomial * const getPoly_array();
}
我的多项式文件的 cpp 看起来像这样:
Monomial * const Polynomial::getPoly_array() {
return poly_array;
}
我有另一个单一对象的头文件和 cpp 文件。
class Monomial
{
private:
int coeff;
int exp;
public:
Monomial(int coeff, int exp = 0);
Monomial();
int GetCoeff();
int GetExp();
//Operator Overloading
void operator += (const Monomial& monomial);
Monomial operator *(const Monomial& monomial1);
void operator *=(const Monomial& monomial);
bool operator ==(const Monomial& monomial);
//Neagative the monomial
void negate();
friend std::ostream& operator << (std::ostream& out, const Monomial& m);
char* stringRepresentation() const;
};
std::ostream& operator << (std::ostream& out, const Monomial& m);
除了错误显示的问题之外,还有另一个问题:
Monomial * poly_array [];
这个声明在C++中格式不正确。方括号表示您声明了一个数组。但是,您没有指定数组的大小。不能声明大小不确定的成员数组。
在C中(自C99以来),它将是"灵活数组成员"的有效声明(编辑:尽管如前所述,它必须是最后一个成员)。虽然这种声明在标准C++中格式不正确,但一些C++编译器允许将其作为语言扩展。
我将假设您已经设法克服了这些问题,并且poly_array
是一个格式良好的Monomial*
数组,因为这就是您的错误消息所暗示的。
我想知道为什么我的变量是指针到指针 (**) 的类型,而不仅仅是 1 个指针。
在 C++(以及 C)中,您不能按值返回数组(也不能将它们作为参数传递给函数)。在此类上下文中使用时,标识符将隐式转换为指向数组第一个元素的指针。这种转换称为数组"衰减"。
数组中每个对象的类型Monomial*
因此Monomial**
指向此类对象的指针。这就是为什么返回表达式的类型为Monomial**
,它与您声明的类型Monomial* const
冲突,因为一个不能隐式转换为另一个。类型系统使你免于做一件愚蠢的事情。
我怀疑你打算poly_array
是一个Monomial
对象的数组。你可以像这样声明这样的数组:
Monomial poly_array[number_of_elements];
// ^ Note the lack of *
number_of_elements
必须在编译时知道。如果这不适合您的情况,您应该改用std::vector<Monomial>
。
声明Monomial * const getPoly_array()
等同于Monomial * getPoly_array()
。const
不起作用。
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 对象 ** 到对象 * 之间的融合
- 用于融合对象阵列的通用函数