1

我有以下代码,除了该行POINTEE* pointee[10];是静态的之外,它确实可以工作,并且我想在创建类时使其动态化,因此它可以是任意大小。

#include <iostream>

class POINTEE
{
    private:

        int index;

    public:

    POINTEE(){}
    POINTEE(int index)
    {
        this->index = index;
    }
    ~POINTEE(){}
    void print_index()
    {
        std::cout<<index<<std::endl;
    }
};
void fill_element(POINTEE* &pointee, int index)
{
    pointee = new POINTEE(index);
}
int main()
{
    POINTEE* pointee[10];//I want to declare this within a class with a variable size instead of 10

    for(int index = 0; index < 10; index++)
        pointee[index] = NULL;

    for(int index = 0; index < 10; index++)
    {
        POINTEE* temp_pointee;
        fill_element(temp_pointee, index);
        pointee[index] = temp_pointee;
    }

    for(int index = 0; index < 10; index++)
        pointee[index]->print_index();

     for(int index = 0; index < 10; index++)
        delete pointee[index];

    return 0;
}

我不想使用std::vector主要是因为我正在尝试设计自己的数据容器。我也试过做

#include <iostream>

class POINTEE
{
    private:

        int index;

    public:

    POINTEE(){}
    POINTEE(int index)
    {
        this->index = index;
    }
    ~POINTEE(){}
    void print_index()
    {
        std::cout<<index<<std::endl;
    }
};
void fill_element(POINTEE* &pointee, int index)
{
    pointee = new POINTEE(index);
}
int main()
{
    POINTEE* pointee;// I changed this
    pointee = new POINTEE[10];//and this and also deleted pointee below

    for(int index = 0; index < 10; index++)
        pointee[index] = NULL;

    for(int index = 0; index < 10; index++)
    {
        POINTEE* temp_pointee;
        fill_element(temp_pointee, index);
        pointee[index] = temp_pointee;
    }

    for(int index = 0; index < 10; index++)
        pointee[index]->print_index();

     for(int index = 0; index < 10; index++)
        delete pointee[index];

    delete [] pointee;//I added this which maybe totally stupid!

    return 0;
}

但这使其他错误出现:

C:\Documents and Settings\project5\array_of_pointers_ops\array_of_pointers_ops.cpp||In function 'int main()':|
C:\Documents and Settings\project5\array_of_pointers_ops\array_of_pointers_ops.cpp|38|error: invalid conversion from 'POINTEE*' to 'int'|
C:\Documents and Settings\project5\array_of_pointers_ops\array_of_pointers_ops.cpp|38|error:   initializing argument 1 of 'POINTEE::POINTEE(int)'|
C:\Documents and Settings\project5\array_of_pointers_ops\array_of_pointers_ops.cpp|42|error: base operand of '->' has non-pointer type 'POINTEE'|
C:\Documents and Settings\project5\array_of_pointers_ops\array_of_pointers_ops.cpp|45|error: type 'class POINTEE' argument given to 'delete', expected pointer|
||=== Build finished: 4 errors, 0 warnings ===|
4

1 回答 1

1

除非您真的想制作自己的矢量类,否则我肯定会自己使用矢量,但您的代码存在一些问题:

下面创建一个指向 10 个 POINTEE 对象数组的指针指针。它不指向指向 POINTEE 对象的指针。

POINTEE* pointee;// I changed this
pointee = new POINTEE[10];//and this and also deleted pointee below

如果将这些行更改为以下内容:

POINTEE** pointee;
pointee = new POINTEE*[10];

那么你的代码至少更接近工作。我没有仔细看,但我认为您的其余代码大部分是可编译的。

于 2013-06-15T21:11:16.000 回答