我正在通过我就读的大学提出的一系列问题来学习C ++。这是该问题的摘录:
一家零售店希望存储有关其销售的信息。典型信息 希望存储有关销售的信息:销售标识号(唯一 每个销售的编号),客户的姓氏和其他名称,以及 客户的地址。一次销售最多可以包含10个不同的项目, 每个项目的数量不同。对于每个商品,销售类别应存储 物料编号,物料描述,单位成本和物料的单位数量 购买以及该项目的总费用。
TLDR:我正在尝试为包含数组作为其属性之一的类编写构造函数。
我正在学习C ++中的类,目前正在尝试使用接口。
为清楚起见,这是接口的简化版本,仅显示构造函数:
Sale.h
class Sale {
int* products_id[];
public:
Sale(int& products_id[]);
};
现在,该接口需要实现:
Sale.cpp
#include "Sale.h"
Sale::Sale(int& product_id[]) {
this->product_id[] = product_id[];
};
由于某些原因,我的IDE(VS代码)抱怨错误
不存在从“ product_id”到“ product_id *”的适当转换函数
我无法在线找到任何相关资源。
如果有人可以帮助我或至少将我指出正确的方向,我将不胜感激。 问候。
答案 0 :(得分:1)
第一部分:指针和C数组
我想您是在编写此类代码段之前学习过Java的。
在Java中,每个对象都有处理程序(或某种程度上的指针),但在C ++中,我们通过复制直接传输对象(没有引用符号或重新定义operator=
)。因此,Java风格的Type arr[]
在您的代码中被滥用,根据C / C ++上下文,它具有完全不同的含义:
例如:
#include <iostream>
using std::cout, std::endl;
int calc_sum(int arr[], int len) { // pointer
int ans = 0;
for (int i = 0; i < len; i++) {
ans += arr[i];
}
return ans;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(int);
cout << n << endl;
cout << calc_sum(arr, n) << endl;
return 0;
}
第二部分:参考
在编写类似int a = 3; int &b = a;
的代码时,您打算将b
用作a
的别名,这意味着“现在a
和b
相同”。因此,int& products_id[]
是指向int
引用的指针。我认为那不是您想要的。
答案 1 :(得分:1)
我将从你的第一句话开始:
我正在尝试为包含数组作为其属性之一的类编写构造函数。
这很勇敢...数组不是语言的头等元素,通常隐藏在标准容器中。 C ++中的一般规则是:如果没有充分的理由在C ++中使用原始数组,则只需坚持使用容器即可。例外是:
使用容器解决的数组问题:
std::vector
std::array
就足够了因此,包含数组作为其属性之一的类不应是普通的普通类。它应该是一个包含复制/移动/析构函数问题的容器(搜索规则3,规则或5)。或者,例如对于坐标,大小必须恒定。