我正在尝试使用仅从已创建的数组中获取正值来创建一个新数组,当我循环遍历原始数组时,索引有一个错误“表达式必须有指向对象类型的指针”我尝试做研究关于错误,当得到这个错误时,每个人的情况都不同,所以我自己就是这个。这是我的代码:
int foo::createNewArray() const {
int newarray[50];
int oldarray = oldarray[values];
int size = (sizeof(oldarray));
for (int i = 0; i > size; i++){
if (oldarray[i] > 0)
newarray[i] = oldarray[i];
}
上面的“i”是有错误的。 oldarray [values]在单独的类文件中声明。以下是代码的一小部分。
class foo{
int oldarray[1];
enum unit {values};
public:
int createNewArray() const;
};
答案 0 :(得分:1)
在这里,您使用本地oldarray
变量隐藏int
数组:
int oldarray = oldarray[values];
从那时起,直到块结束,oldarray
表示一个int,然后其余代码对此没有多大意义。
答案 1 :(得分:0)
问题是因为oldArray需要是一个int *,而不仅仅是一个int。您当前正在将oldarray设置为数组中的第一个值,而不是将其指向数组的根。所以像int * oldArray = newArray这样的东西会让你使用索引运算符迭代oldArray。
class Foo
{
int* oldArray;
int size;
public:
int* CreateNewArray() const
{
int* newArray = new int[size];
int current = 0;
for( int index = 0; index < size; index++)
{
if(oldArray[index] > 0)
{
newArray[current] = oldArray[index];
current++;
}
}
return newArray;
}
};
我为偶然发布这个而不编译而道歉。虽然这个解决方案可能比建议的更接近金属,但它仍然是解决问题的有效方法,假设在调用此方法之前设置了oldArray和size。
答案 2 :(得分:0)
以下是此代码问题的逐行注释。
class foo{
int oldarray[1]; //Do you really want an array of size 1? Why not just an integer?
enum unit {values};//An enumeration that only enumerates one thing? Are you sure you don't really want const int VALUES = 0; I feel like you don't really even want an enum
public:
int createNewArray() const;
};
int foo::createNewArray() const {
int newarray[50]; //Magic numbers are bad, what if sizeof(oldarray) > 50?
int oldarray = oldarray[values]; //Re declaring oldarray as a single integer and assigning it oldarray[values] as its value.
int size = (sizeof(oldarray)); //is this oldarray an integer or an array of integers???
for (int i = 0; i > size; i++){ //don't you want i < size??? if size > 0, this loop will never get run.
if (oldarray[i] > 0) //probably grabbing the correct oldarray(Compilers are smart), but not getting expected values because the array version of oldarray wasn't initialized properly.
newarray[i] = oldarray[i];
}
我相信你要做的是以下几点:
int* foo::createNewArray() const {
const int SIZE = sizeof(oldarray);
int *newArray = int[SIZE];
for(int i = 0; i < SIZE; i++) {
if(oldarray[i] > 0) {
newArray[i] = oldarray[i];
} else {
newArray[i] = 0;//In most environments this is unnecessary, but it is safer and good style
}
}
return newArray;
}
注意,即使这个代码只有当oldarray在这段代码的范围内时才会起作用(不是很好的样式,将其作为参数传递给createNewArray会更好,但没关系)并且正确实例化以便sizeof(oldarray) )是数组的大小而不是整数的大小,或者可能是整数指针,我忘了。