C++ "Function"未在此范围内声明

C++ "Function" was not declared in this scope

本文关键字:范围内 声明 Function C++      更新时间:2023-10-16

课堂上给我布置了作业:

编写程序,使用指针创建和管理数组。主程序只能通过各种函数与指针/数组交互。然后,这些函数将限制数组的使用,以正确处理它们。例如,这些函数将消除超出数组边界的可能性。

到目前为止,我已经编写了程序并修复了大多数错误,但是无论我尝试什么,我都一直得到"在此范围内未声明的函数"错误。该程序包括以下文件:main.cppMyArray.cppMyArray.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.
*/

我得到的错误类似于:main.cpp:'LineNumber': error. 'Every Function in MyArray.cpp' was not declared in this scope(我将复制粘贴准确的错误,但我不能从我用来连接到远程主机的终端复制粘贴,我编译我的代码)


我一直在试图解决这个问题几个小时,我不能弄清楚,我甚至看了其他Stack帖子像'foo'没有在这个范围内声明c++
感谢您的帮助。

main.cpp也不是我写的,它是分配给我的

在c++中,A类的函数foo可以被A.foo()A_ptr->foo()调用,而foo()则不能。

我认为这里不需要类,使用自由函数就可以了。

如果您确实想使用MyArray类,则不需要在main.cpp中编写int *Array1, *Array2;并将其作为参数传递。也许最好将数组存储在MyArray类中。

就像这样。

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

我忽略了你的解决方案中的一些函数以及析构函数,你应该使用delete[]

找一本关于c++的书并学习它。您需要创建一个MyArray对象,并使用对象调用函数:

MyArray myArr;
myArr.CreateArray(Array1, Array1Size);

如果给出了main,你的createArray将不得不在内部创建数组:

MyArray myArr;
void CreateArray(int *array, int size)
{
    return myArr.CreateArray(array, size);
}

首先你要明白什么是类。在你的例子中,要调用MyArray函数你必须有一个MyArray类的实例:

MyArray a;
a.CreateArray(...);
...