【问题标题】:How to solve "invalid type argument of '->'" and "expected identifier or '(' before '[' token" error?如何解决“'->'的类型参数无效”和“预期标识符或'('之前'['令牌”错误?
【发布时间】:2013-10-20 20:36:58
【问题描述】:
 #include "int_set.h" 


  Set * int_set_new()
   {
    Set *result; 

result-> current_elements = 0; 
result-> max_elements = MIN_SIZE; 
result->array =malloc(sizeof(int) * MIN_SIZE);
return result;
  }
   int int_set_lookup(Set*this, int item)
  {
  int i = 0;
int result;
int found = 0 ;
for ( int i = 0; i<this->max_elements && found ==0 ; i++){
    //if (result->array[i] == item ) {
    if(result->array[i]== item){ // error invalid type of argument'->'

        found = 1; 
    } 
}
    if ( i>= this-> current_elements  ){
        found*= -1 ; 
    }  
    return found ;
} 

 int int_set_add(Set*this, int item){


if ( int_set_lookup(this, item) == 1){
    return 0;
}
if ( this-> current_elements < this -> max_elements  ){
    this -> array[this->current_elements] = item ; 
    this->current_elements++ ; 
    return 1 ;
}else{
    int i;
    int new_array[i];

    int [] new_array = malloc(sizeof(int)* 1.5*this->current_elements); // error
    for ( i=0; i<this->max_elements ; i++){
        new_array[i] = this->array[i];

    }
    this-> max_elements = 1.5*this->current_elements; 

    new_array[this->current_elements] = item;
    this-> current_elements ++;

    free ((void *)this->array); 

    this->array = new_array ; 
    return 1;
}

}

   int int_set_remove(Set * this, int item){
if ( int_set_lookup(this, item) == 0){
    return 0;
}
int i = 0;
int array[i];

for( i ; i< this-> current_elements && this->array != item; i++);

for( i; i< this-> current_elements-1;  i++){
    array[i] = array [i+1];
}
this-> current_elements-- ; 

int freeSlots= this->max_elements-this->current_elements;
int maxFree= 32> this->current_elements? 16 : this->current_elements/2 ;
if( freeSlots > maxFree ){

    int new_array[i];
    //int [] new_array = malloc(sizeof(int)* 1.5*this->current_elements);
    int [] new_array = malloc(sizeof(int)* 1.5*this->current_elements); // error
    for ( i=0; i<this->current_elements ; i++){
        new_array[i] = this->array[i];

    }
    this-> max_elements = 1.5*this->current_elements; 



    free ((void *)this->array); 

    this->array = new_array ; 
    }

   return 1;
     }

//error 的 2 行有

预期标识符或 '(' 之前的 '[' 标记错误

如何解决以上错误?

有问题的线路是

if(result->array[i]== item){ // error invalid type of argument'->'

int [] new_array = malloc(sizeof(int)* 1.5*this->current_elements); // error

请帮忙!

【问题讨论】:

  • 去掉int []位,应该是什么意思?

标签: c arguments identifier


【解决方案1】:
  1. resultint,而不是指针,因此您不能使用 -&gt;。并不是说您无论如何都可以将它与int * 一起使用,因为它可以引用struct *
  2. 您已经声明了new_array,因此无需再次声明。加上 int [] new_array 在 C 中的语法不正确,与 Java 不同。

【讨论】:

  • ive 将结果更改为 int *result;它现在是一个指针,但它现在也给了我一个错误。我到底应该在我的程序中改变什么?
  • 不应该像 int_set_new() 那样将 result 设为 Set * 吗?
  • 这些是我改变的行 int new_array [] = malloc(sizeof(int)* 1.5*this->current_elements);虽然仍然出现错误:S
【解决方案2】:

result 是一个局部变量,所以在int_set_new() 中是Set*,但在int_set_lookup() 中是int。如果你把它改成int*那么它指向一个int,而不是一个struct,那么你怎么能用-&gt;来引用一个int的字段

对于第二个错误,this 是 C++ 中的保留字。可能你编译的语言不对

顺便说一句,你应该重新缩进你的代码

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多