' ' 在这方面没有申明

' ' was not declared in this scope

我试图实现这个动态数组,但我 运行 遇到了一些问题 当我尝试编译它时,编译器告诉我我的一堆函数没有在此范围内声明

这是文件

dynamicArray.h

#ifndef DYNAMICARRAY_H
#define DYNAMICARRAY_H

#include <ctime>
#include<iostream>
class dynamicArray{
public:
    dynamicArray();
    int * array_constructor(int *  &intPtr, int &size );
    int * array_resize(int * &intPtr, int& currSize, int& newSize);
    void array_destructor(int * &intPtr);
    void array_set(int* &intPtr, int &size);
};
#endif  // DYNAMICARRAY_H

dynamicArray.cpp

#include "dynamicArray.h"
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;


int * array_constructor(int *  &intPtr, int &size ){
    if(intPtr != NULL){
        delete [] intPtr;
    }

    intPtr = new int[size];
    for (int i = 0; i < size; i++){
        intPtr[i] = i*i;
    }

    return intPtr;
}

int * array_resize(int * &intPtr, int& currSize, int& newSize){
    if(newSize == 0){
        delete [] intPtr;
        return NULL;
    }else if((newSize == currSize) || (newSize < 0)){
        return intPtr;
    }

    int * array = new int[newSize];
    for (int i = 0; i < newSize; i++){
        array[i] = i*i;
    }

    return array;
}

void array_destructor(int * &intPtr){
    delete [] intPtr;
    intPtr = NULL;
}

void array_set(int*& intPtr, int& size){
    srand(time(0));
    for (int i = 0; i < size; i++){
        intPtr[i] = rand();
    }
}

main.cpp

#include "dynamicArray.h"
#include <array>
#include <iostream>

using namespace std;

void print(int array[], int size){
    if(array == NULL){
        cout << "array is empty" << endl;
        return;
    }

    for(int i = 0; i < size; i++){
        cout << "array[" << i << "] = " << array[i] << endl;
    }
    cout << endl;
    return;
}

int main() {
    int *myArray = NULL;
    int size = 8;
    int newSize1 = 10;
    int newSize2 = 5;
    int newSize3 = -1;
    int finalSize = 1;

    myArray = array_constructor(myArray, size);
    print(myArray, size);

    myArray = array_resize(myArray, size, newSize1);
    print(myArray, newSize1);

    myArray = array_resize(myArray, newSize1, newSize2);
    print(myArray, newSize2);

    myArray = array_resize(myArray, newSize2, newSize3);
    print(myArray, newSize2);

    array_set(myArray, newSize2);
    print(myArray, newSize2);

    array_destructor(myArray);
    print(myArray, finalSize);

    return 0;
}

我试着用 int * dynamicArray::array_constructor(int * &intPtr, int &size ) 代替,但没有成功 我是不是在头文件或 dynamicArray.cpp 中做错了什么? 这个以前有用过,但是忘记怎么做了。

如果您想在 class 中实现动态数组管理,您需要使用 class 名称来限定您的方法实现。

dynamicArray.cpp

int * dynamicArray::array_constructor(int *  &intPtr, int &size ){
    if(intPtr != NULL){
    // ...

其他成员功能相同。

但是,您根本没有以 class-like 的方式使用 class。因此,您可以考虑将 class 变成 namespace 并在那里(或在全局范围内)实现功能:

dynamicArray.h

namespace dynamicArray // optional namespace
{
    int * array_constructor(int *  &intPtr, int &size );
    int * array_resize(int * &intPtr, int& currSize, int& newSize);
    void array_destructor(int * &intPtr);
    void array_set(int* &intPtr, int &size);
}

dynamicArray.cpp

namespace dynamicArray // optional namespace
{
    int * array_constructor(int *  &intPtr, int &size ){
        if(intPtr != NULL){

    // ... implement your functions like before
}

main.cpp - 添加命名空间用法

//...
using namespace std;
using namespace dynamicArray;
//...