' '在这方面没有申明

时间:2018-03-15 06:28:09

标签: c++ pointers header-files dynamic-arrays

我试图实现这个动态数组的东西,我遇到了一些问题 当我尝试编译它时,编译器告诉我,我的一系列函数未在此范围内声明

这是文件

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 *&amp; intPtr,int&amp; size)改为使用,但没有运气 我在头文件或dynamicArray.cpp中做错了吗? 这之前有用,但我忘记了怎么做。

1 个答案:

答案 0 :(得分:1)

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

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
}

main.cpp - 添加名称空间使用

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