代码之家  ›  专栏  ›  技术社区  ›  Leslie Zhou

“”未在此作用域中声明[已关闭]

  •  -5
  • Leslie Zhou  · 技术社区  · 7 年前

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

    这是文件

    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();
        }
    }
    

    主要的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\u构造函数(int*&intPtr,int&size),但没有成功 头文件或dynamicArray中是否有问题。cpp? 这以前有用,但我忘了怎么做。

    1 回复  |  直到 7 年前
        1
  •  1
  •   grek40    7 年前

    如果要在类中实现动态数组管理,需要使用类名限定方法实现。

    dynamicArray。cpp公司

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

    其他成员的功能相同。

    然而,您根本没有以类的方式使用您的类。所以你可以考虑把你的班级变成 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
    }
    

    主要的cpp公司 -添加命名空间用法

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