我试图实现这个动态数组的东西,我遇到了一些问题 当我尝试编译它时,编译器告诉我,我的一系列函数未在此范围内声明
这是文件
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中做错了吗? 这之前有用,但我忘记了怎么做。
答案 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;
//...