简体   繁体   中英

C++ “Function” was not declared in this scope

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

main.cpp

#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;
}

MyArray.h

#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

MyArray.cpp

#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 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.

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[]

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM