簡體   English   中英

*屬於非類類型*的成員*的請求

[英]request for member * in *, which is of non-class type *

我正在嘗試在C ++中創建一個動態數組類,但是出現一些指針錯誤,例如。 在第23行上,我需要將pointer值(引用號)更改為this.first的值,這也是一個指針- pointer並且this.first應指向相同的值。

#include <string>
#include <iostream>
using namespace std;

class ArrayMember {
    public:
        ArrayMember* next;
        ArrayMember* prev;
        int index;
        int value;
        ArrayMember(){}
};

class Array {
    private:
        ArrayMember* first;
        ArrayMember* last;
        int length;

    public:
        int get(int index){
        ArrayMember* point;

        if(index<length/2){
            point = this.first; //error: request for member ‘first’ in ‘this’, which is of non-class type ‘Array* const’
            while(*point.index != index) { // error: request for member ‘index’ in ‘point’, which is of non-class type ‘ArrayMember*’
                point = *point.next; //error: request for member ‘next’ in ‘point’, which is of non-class type ‘ArrayMember*’
            }
            return *point.value; //error: request for member ‘value’ in ‘point’, which is of non-class type ‘ArrayMember*’
        } else if(index<length) {
            point = this.last; //error: request for member ‘last’ in ‘this’, which is of non-class type ‘Array* const’
            while(*point.index != index){ //error: request for member ‘index’ in ‘point’, which is of non-class type ‘ArrayMember*’
                point = *point.prev; //error: request for member ‘prev’ in ‘point’, which is of non-class type ‘ArrayMember*’
            }
            return *point.value; //error: request for member ‘value’ in ‘point’, which is of non-class type ‘ArrayMember*’
        }else{
            return NULL; //warning: converting to non-pointer type ‘int’ from NULL
        }
    }
    int set(int index, int value){
        //...
    }
    int indexOf(int value){
        //...
    }
    Array(){
        ArrayMember x = new ArrayMember;
        x.index = 0;
        this.first = x;
        this.last = x;
    }
};

變量this是一個指針 ,因此您需要使用this->first來訪問this成員。

所有指向結構的指針也是如此,您需要使用->運算符而不是. 操作員。

您當然可以使用. 運算符,並且非常接近,但是指針取消引用運算符* 優先級低於. 運算符,因此您實際上嘗試取消引用*point.nextnext元素。 您需要像(*point).next這樣的括號。 但是,使用->運算符代替point->next更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM