1

クラスで次の課題を与えられました。

ポインターを使用して配列を作成および管理するプログラムを作成します。メインプログラムは、さまざまな関数を介してのみポインター/配列と対話する必要があります。これらの関数は、配列の使用を適切な処理に制限します。たとえば、これらの関数は、配列の境界を超える可能性を排除します。

これまでのところ、プログラムを作成してほとんどのエラーを修正しましたが、何を試しても「関数はこのスコープで宣言されていません」というエラーが発生し続けます。このプログラムには、次のファイルが含まれていますmain.cpp MyArray.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(正確なエラーをコピーして貼り付けますが、コードをコンパイルした場合、リモートホストへの接続に使用している端末からコピーして貼り付けることはできません)


私は何時間もこの問題を解決しようとしてきましたが、それを理解することはできません.「foo」がこのスコープで宣言されていないなどの他のスタックの投稿を見てきましたc ++

また、私は main.cpp を書きませんでした。それは割り当てで与えられました。

4

3 に答える 3

2

C++ では、fooクラスの関数をorでA呼び出すことができますが、 aだけでは機能しません。A.foo()A_ptr->foo()foo()

ここではクラスは必要ないと思います。無料の関数を使用してください。

MyArrayクラスを使用する場合はint *Array1, *Array2;、main.cpp に記述して引数として渡す必要はありません。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[]

于 2013-03-05T09:42:20.027 に答える
1

C ++に関する本を入手して、調べてください。MyArrayオブジェクトを作成し、そのオブジェクトを使用して関数を呼び出す必要があります。

MyArray myArr;

myArr.CreateArray(Array1, Array1Size);

mainが指定されている場合、createArrayは内部で配列を作成する必要があります。

MyArray myArr;

void CreateArray(int *array, int size)
{
    return myArr.CreateArray(array, size);
}
于 2013-03-05T06:42:57.373 に答える
0

まず、クラスとは何かを理解してください。あなたの場合、 MyArray 関数を呼び出すには、 MyArray クラスのインスタンスが必要です。

MyArray a;
a.CreateArray(...);
...
于 2013-03-05T06:47:06.447 に答える