Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;:通过引用传递(指向?)对象数组的指针 我是C++的新手,用一个指针和引用创建一个对象数组时,我遇到了很大的麻烦。这不是实际代码;这是代码基本功能的一个示例 #include <iostream> class MyClass { public: MyClass(); static int doStuff(MyClass *&classArray); void print_number(); private: int number; }; MyClass::MyClass() { } int MyClass::doStuff(MyClass *&classArray) { int i = 0; for (i = 0; i < 10; i++) { *classArray[i].number = i; } return i; } void MyClass::print_number() { std::cout << number << "\n"; } int main(void) { MyClass *test = nullptr; int p = MyClass::doStuff(test); std::cout << p << '\n'; for (int i = 0; i < 10; i++) { test[i].print_number(); } return 0; } #包括 类MyClass { 公众: MyClass(); 静态int-doStuff(MyClass*&classArray); 无效打印号码(); 私人: 整数; }; MyClass::MyClass() { } int MyClass::doStuff(MyClass*&classArray) { int i=0; 对于(i=0;ix=x; 这->y=y; } MyClass::MyClass(MyClass和OldClass) { 此->编号=OldClass.number; 这->x=OldClass.x; 这->y=OldClass.y; } int MyClass::doStuff(MyClass*&类数组,int Size,int x,int y) { 如果(大小>0) { classArray=新的MyClass[大小]; 对于(int i=0;i_C++_Arrays_Parameter Passing - Fatal编程技术网 y=y; } MyClass::MyClass(MyClass和OldClass) { 此->编号=OldClass.number; 这->x=OldClass.x; 这->y=OldClass.y; } int MyClass::doStuff(MyClass*&类数组,int Size,int x,int y) { 如果(大小>0) { classArray=新的MyClass[大小]; 对于(int i=0;i,c++,arrays,parameter-passing,C++,Arrays,Parameter Passing" /> y=y; } MyClass::MyClass(MyClass和OldClass) { 此->编号=OldClass.number; 这->x=OldClass.x; 这->y=OldClass.y; } int MyClass::doStuff(MyClass*&类数组,int Size,int x,int y) { 如果(大小>0) { classArray=新的MyClass[大小]; 对于(int i=0;i,c++,arrays,parameter-passing,C++,Arrays,Parameter Passing" />

C++;:通过引用传递(指向?)对象数组的指针 我是C++的新手,用一个指针和引用创建一个对象数组时,我遇到了很大的麻烦。这不是实际代码;这是代码基本功能的一个示例 #include <iostream> class MyClass { public: MyClass(); static int doStuff(MyClass *&classArray); void print_number(); private: int number; }; MyClass::MyClass() { } int MyClass::doStuff(MyClass *&classArray) { int i = 0; for (i = 0; i < 10; i++) { *classArray[i].number = i; } return i; } void MyClass::print_number() { std::cout << number << "\n"; } int main(void) { MyClass *test = nullptr; int p = MyClass::doStuff(test); std::cout << p << '\n'; for (int i = 0; i < 10; i++) { test[i].print_number(); } return 0; } #包括 类MyClass { 公众: MyClass(); 静态int-doStuff(MyClass*&classArray); 无效打印号码(); 私人: 整数; }; MyClass::MyClass() { } int MyClass::doStuff(MyClass*&classArray) { int i=0; 对于(i=0;ix=x; 这->y=y; } MyClass::MyClass(MyClass和OldClass) { 此->编号=OldClass.number; 这->x=OldClass.x; 这->y=OldClass.y; } int MyClass::doStuff(MyClass*&类数组,int Size,int x,int y) { 如果(大小>0) { classArray=新的MyClass[大小]; 对于(int i=0;i

C++;:通过引用传递(指向?)对象数组的指针 我是C++的新手,用一个指针和引用创建一个对象数组时,我遇到了很大的麻烦。这不是实际代码;这是代码基本功能的一个示例 #include <iostream> class MyClass { public: MyClass(); static int doStuff(MyClass *&classArray); void print_number(); private: int number; }; MyClass::MyClass() { } int MyClass::doStuff(MyClass *&classArray) { int i = 0; for (i = 0; i < 10; i++) { *classArray[i].number = i; } return i; } void MyClass::print_number() { std::cout << number << "\n"; } int main(void) { MyClass *test = nullptr; int p = MyClass::doStuff(test); std::cout << p << '\n'; for (int i = 0; i < 10; i++) { test[i].print_number(); } return 0; } #包括 类MyClass { 公众: MyClass(); 静态int-doStuff(MyClass*&classArray); 无效打印号码(); 私人: 整数; }; MyClass::MyClass() { } int MyClass::doStuff(MyClass*&classArray) { int i=0; 对于(i=0;ix=x; 这->y=y; } MyClass::MyClass(MyClass和OldClass) { 此->编号=OldClass.number; 这->x=OldClass.x; 这->y=OldClass.y; } int MyClass::doStuff(MyClass*&类数组,int Size,int x,int y) { 如果(大小>0) { classArray=新的MyClass[大小]; 对于(int i=0;i,c++,arrays,parameter-passing,C++,Arrays,Parameter Passing,它不起作用,因为您需要分配数组,因为函数正在尝试访问尚未初始化以容纳该数量元素的数组的元素 MyClass *test = new MyClass[array_size]; 或 或者使用一个可调整大小的容器,如std::vector,并相应地更改函数参数(不要忘记在程序或析构函数结束时使用delete[]删除classArray): 新操作符必须有默认构造函数,如果您想使用非默认构造函数,那么创建复制构造函数、临时对象和复制就更容易了 #include <iostream> c

它不起作用,因为您需要分配数组,因为函数正在尝试访问尚未初始化以容纳该数量元素的数组的元素

MyClass *test = new MyClass[array_size];

或者使用一个可调整大小的容器,如std::vector,并相应地更改函数参数(不要忘记在程序或析构函数结束时使用
delete[]删除classArray)


新操作符必须有默认构造函数,如果您想使用非默认构造函数,那么创建复制构造函数、临时对象和复制就更容易了

#include <iostream>

class MyClass
{
public:
    MyClass();
    MyClass(int x, int y);
    MyClass(MyClass &OldClass);
    static int doStuff(MyClass *&classArray, int Size, int x, int y);
    void print_number();

private:
    int number, x, y;
};

MyClass::MyClass()
{
    number = 0;
    x = 0;
    y = 0;
}

MyClass::MyClass(int x, int y)
{
    number = 0;
    this->x = x;
    this->y = y;
}

MyClass::MyClass(MyClass &OldClass)
{
    this->number = OldClass.number;
    this->x = OldClass.x;
    this->y = OldClass.y;
}

int MyClass::doStuff(MyClass *&classArray, int Size, int x, int y)
{
    if (Size > 0)
    {
        classArray = new MyClass[Size];
        for (int i = 0; i < Size; i++)
        {
            classArray[i] = MyClass(x, y);
            classArray[i].number = i;
        }

        return Size;
    }
    else
        return 0;
}

void MyClass::print_number()
{
    std::cout << number << " " << x << " " << y << "\n";
}

int main(void)
{
    MyClass *test = nullptr;
    int p = MyClass::doStuff(test, 10, 5, 6);
    std::cout << p << '\n';
    for (int i = 0; i < p; i++) {
        test[i].print_number();
    }
    delete[] test;
    std::cin.get();
    return 0;
}
#包括
类MyClass
{
公众:
MyClass();
MyClass(整数x,整数y);
MyClass(MyClass和OldClass);
静态int-doStuff(MyClass*&类数组,int-Size,int-x,int-y);
无效打印号码();
私人:
整数x,y;
};
MyClass::MyClass()
{
数字=0;
x=0;
y=0;
}
MyClass::MyClass(int x,int y)
{
数字=0;
这个->x=x;
这->y=y;
}
MyClass::MyClass(MyClass和OldClass)
{
此->编号=OldClass.number;
这->x=OldClass.x;
这->y=OldClass.y;
}
int MyClass::doStuff(MyClass*&类数组,int Size,int x,int y)
{
如果(大小>0)
{
classArray=新的MyClass[大小];
对于(int i=0;i

您还取消了对非指针的引用,因此此代码甚至无法编译。我得到的错误是:

main.cpp:23:9: error: indirection requires pointer operand ('int' invalid)
        *classArray[i].number = i;
        ^~~~~~~~~~~~~~~~~~~~~

大概这是因为,正如您所说,您显示的代码不是真实代码,并且
classArray[i]。数字
对应于真实代码中的指针。但我想我还是要指出这一点,以防万一。

鉴于您代码的上下文,下面是一个代码的工作示例:

#include <iostream>

class MyClass
{
    public:
        MyClass() {}

        static int doStuff(MyClass*& classArray, size_t sz)
        {
            int i = 0;
            for (; i < sz; i++) {
                classArray[i].number = i;
            }
            // not sure what you want here, but this will return sz+1 if sz>0
            return i;
        }

        void print_number()
        {
            std::cout << this->number << std::endl;
        }

    private:
        int number;
};

int main(void)
{
    MyClass* test = new MyClass[10];
    int p = MyClass::doStuff(test, 10);
    std::cout << p << '\n';
    for (int i = 0; i < 10; i++) {
        test[i].print_number();
    }
    delete[] test;
    return 0;
}

希望这能有所帮助。

您从未分配内存来保存
MyClass的实例。
。您应该(主要)编写
MyClass测试[10];
而不是
MyClass*test=NULL;
@leemes我的错误:在实际的代码中是
MyClass*class=nullptr
。我会解决这个问题。这或多或少是一样的。两者都不分配任何内存。我说
MyClass-test[10]
实际的类有一个构造函数,我已将其设置为接受两个参数。我如何将其考虑到类似于
MyClass insertedClass(arg1,arg2);classArray[I]=inserted class
?我稍后将尝试给您一个示例。
main.cpp:23:9: error: indirection requires pointer operand ('int' invalid)
        *classArray[i].number = i;
        ^~~~~~~~~~~~~~~~~~~~~
#include <iostream>

class MyClass
{
    public:
        MyClass() {}

        static int doStuff(MyClass*& classArray, size_t sz)
        {
            int i = 0;
            for (; i < sz; i++) {
                classArray[i].number = i;
            }
            // not sure what you want here, but this will return sz+1 if sz>0
            return i;
        }

        void print_number()
        {
            std::cout << this->number << std::endl;
        }

    private:
        int number;
};

int main(void)
{
    MyClass* test = new MyClass[10];
    int p = MyClass::doStuff(test, 10);
    std::cout << p << '\n';
    for (int i = 0; i < 10; i++) {
        test[i].print_number();
    }
    delete[] test;
    return 0;
}
#include <iostream>
#include <vector>

class MyClass
{
    public:
        MyClass() {}
        MyClass(int i) : number(i) {}

        static int doStuff(std::vector<MyClass>& classArray, size_t sz)
        {
            int i = 0;
            for (; i < sz; i++) {
                classArray.push_back(MyClass(i));
            }
            // not sure what you want here, but this will return sz+1 if sz>0
            return i;
        }

        void print_number()
        {
            std::cout << this->number << std::endl;
        }

    private:
        int number;
};

int main(void)
{
    std::vector<MyClass> test;
    int p = MyClass::doStuff(test, 10);
    std::cout << test.size() << '\n';
    // can use iterators here if you want
    std::vector<MyClass>::iterator itr = test.begin();
    for (; itr != test.end(); itr++) {
        itr->print_number();
    }
    return 0;
}