Reputation: 4233
I was given an assignment in class to:
Write a program that creates and manages arrays by the use of pointers. Your main program should interact with pointers/arrays only through various functions. These functions will then limit the use of array to their proper handling. For example these functions will eliminate the possibility of overstepping the boundaries of an array.
So far I have written the program and fixed most of the errors, however no matter what I try I keep getting "function not declared in this scope" errors. The program includes the following files: main.cpp
MyArray.cpp
and MyArray.h
#include <iostream>
#include "MyArray.h"
using namespace std;
int main(int argc, char * argv[]) {
int *Array1, *Array2;
int Array1Size(10), Array2Size(10);
int Array1Value(0), Array2Value(0);
cout << "Enter Size and Initial value for Array1: ";
cin >> Array1Size >> Array1Value;
cout << "Enter Size and Initial value for Array2: ";
cin >> Array2Size >> Array2Value;
CreateArray(Array1, Array1Size);
InitArray(Array1, Array1Size, Array1Value);
CreateArray(Array2, Array2Size);
InitArray(Array2, Array2Size, Array2Value);
cout << "Printing Array1:" << endl;
PrintArray(Array1, Array1Size);
cout << endl;
cout << "Printing Array2:" << endl;
PrintArray(Array2, Array2Size);
cout << endl;
if(CopyArray(Array1, Array1Size, Array2, Array2Size)) {
cout << "Copy was successful" << endl;
} else {
cout << "Copy was not successful" << endl;
}
cout << "Printing Array1:" << endl;
PrintArray(Array1, Array1Size);
cout << endl;
EnterArray(Array1, Array1Size);
// MergeArray(Array1, Array1Size, Array2, Array2Size);
cout << "Printing Array1:" << endl;
PrintArray(Array1, Array1Size);
cout << endl;
return 0;
}
#ifndef _MyArray_h_included_
#define _MyArray_h_included_
class MyArray
{
public:
void CreateArray(int *array, int size);
/*
CreateArray(int *array, int size): Will accept a pointer to an array, and the size of the array and will allocate the appropriate amount of memory for the array
*/
void InitArray(int *array, int size, int value);
/*
InitArray(Array1, Array1Size, Array1Value): Will initialize the contents of the arry Array1 to the value Array1Value
*/
void PrintArray(int *array, int size);
/*
PrintArray(Array1, Array1Size): Will print the contest of the Array1
*/
bool CopyArray(int *arrayOne, int sizeOne, int *arrayTwo, int sizeTwo);
/*
CopyArray(Array1, Arrary1Size, Array2, Array2Size): Will copy the contents of Array2 to Array1 iff the two arrays are of equal size. If the copying process is successfully completed, then a value of 1 is returned, otherwise a value of 0 is returned.
*/
void EnterArray(int *array, int size);
/*
EnterArray(Array1, Array1Size): Will populate the Array1 from the stdin by prompting the user to enter all elements of the array.
*/
};
#endif
#include <iostream>
#include "MyArray.h"
using namespace std;
void MyArray::CreateArray(int *array, int size) {
array = new int[size];
}
/*
CreateArray(int *array, int size): Will accept a pointer to an array, and the size of the array and will allocate the appropriate amount of memory for the array
*/
void MyArray::InitArray(int *array, int size, int value) {
for(int index(0); index < size; index++) {
array[index] = value;
}
}
/*
InitArray(Array1, Array1Size, Array1Value): Will initialize the contents of the arry Array1 to the value Array1Value
*/
void MyArray::PrintArray(int *array, int size) {
for(int index(0); index < size; index++) {
cout << "Value of index: " << index << " is " << array[index] << endl;
}
}
/*
PrintArray(Array1, Array1Size): Will print the contest of the Array1
*/
bool MyArray::CopyArray(int *arrayOne, int sizeOne, int *arrayTwo, int sizeTwo) {
if(sizeOne != sizeTwo) {
return false;
} else {
for(int index(0); index < sizeTwo; index++) {
arrayOne[index] = arrayTwo[index];
}
return true;
}
}
/*
CopyArray(Array1, Arrary1Size, Array2, Array2Size): Will copy the contents of Array2 to Array1 iff the two arrays are of equal size. If the copying process is successfully completed, then a value of 1 is returned, otherwise a value of 0 is returned.
*/
void MyArray::EnterArray(int *array, int size){
int index(0);
while(index < size) {
int value(0);
cout << "Enter the value for index: " << index + 1 << endl;
cin >> value;
array[index] = value;
}
}
/*
EnterArray(Array1, Array1Size): Will populate the Array1 from the stdin by prompting the user to enter all elements of the array.
*/
The errors I get resemble this: main.cpp:'LineNumber': error. 'Every Function in MyArray.cpp' was not declared in this scope
(I would copy paste the exact errors but I can't copy paste from the terminal I'm using to connect to the remote host were I compile my code)
I've been trying to fix this problem for hours and I can't figure it out, I've even looked at other Stack posts like 'foo' was not declared in this scope c++
Any help would be much appreciated, thank you.
Also I did not write main.cpp, it was given with the assignment.
Upvotes: 2
Views: 30510
Reputation: 172
In C++, a function foo
of a class A
can be invoked by A.foo()
or A_ptr->foo()
, just a foo()
will not work.
I think you don't need a class here, just use free functions.
If you do want to use a MyArray
class, there's no need to write int *Array1, *Array2;
in main.cpp and pass it as an arg. It maybe better to store the array in MyArray
class.
Just like this.
main.cpp
#include <iostream>
#include "MyArray.h"
using namespace std;
int main(int argc, char * argv[]) {
//int *Array1, *Array2;
MyArray Array1;
int Array1Size(10);
int Array1Value(0);
cout << "Enter Size and Initial value for Array1: ";
cin >> Array1Size >> Array1Value;
Array1.CreateArray(Array1Size);
Array1.InitArray(Array1Size, Array1Value);
cout << "Printing Array1:" << endl;
Array1.PrintArray(Array1Size);
cout << endl;
return 0;
}
MyArray.h
#ifndef _MyArray_h_included_
#define _MyArray_h_included_
class MyArray
{
public:
void CreateArray(int size);
void InitArray(int size, int value);
void PrintArray(int size);
private:
int *m_array;
};
#endif
MyArray.cpp
#include <iostream>
#include "MyArray.h"
using namespace std;
void MyArray::CreateArray(int size) {
m_array = new int[size];
}
void MyArray::InitArray(int size, int value) {
for(int index(0); index < size; index++) {
m_array[index] = value;
}
}
void MyArray::PrintArray(int size) {
for(int index(0); index < size; index++) {
cout << "Value of index: " << index << " is " << m_array[index] << endl;
}
}
I ignored some functions in your solution as well as the destructor, where you should use delete[]
Upvotes: 3
Reputation: 4319
First of all you have understand what class is. In your case to invoke your MyArray functions you have to have an instance of the MyArray class:
MyArray a;
a.CreateArray(...);
...
Upvotes: 1
Reputation: 6771
Get a book on C++ and study it. You need to create a MyArray object and call the functions using the object:
MyArray myArr;
myArr.CreateArray(Array1, Array1Size);
etc
If main is given, your createArray will have to Create the Array internally:
MyArray myArr;
void CreateArray(int *array, int size)
{
return myArr.CreateArray(array, size);
}
Upvotes: 1