bugfix> c++ > 投稿

このプログラムでは、コンソールにメニューを作成する必要があり、ユーザーは2つの配列を配置し、ユニオンとインターセクションを見つけるなど、それらに関連するいくつかのオプションを表示しますが、ユーザーがこのメニューから出るように指定するまでこれらの2つの配列を使用する必要があります。

だから、私はユーザーに各配列にどれくらいの大きさのものを入れるかを入力させ、オプションが表示されるたびに配列も印刷しますが、問題はありません。

ユーザーがメニューで選択を選択すると、main.cpp内でvoid()関数が呼び出され、そのvoid関数はaux cppで関数を呼び出します。

void conjuntos(){
cout<< "----------------------------------------"<<endl;
cout<< "                Conjuntos               "<<endl;
cout<< "----------------------------------------"<<endl;
char** opciones = new char*[6];
    opciones[0] = "Union";
    opciones[1] = "Interseccion";
    opciones[2] = "Diferencia";
    opciones[3] = "Diferencia simetrica";
    opciones[4] = "Pertenece";
    opciones[5] = "Contenido";
int opc;
//Here the user inputs each array
                            cout<<"Ingrese dos arreglos"<<endl;
                            cout<<"Arreglo 1 (cantidad): ";
                            int cant1;
                            cin>>cant1;
 int arr1[cant1];
                                    for(int i= 0;i<cant1;i++){
                                        cout<<i+1<<". ";
                                        cin>>arr1[i];
                                    };
                            cout<<"Arreglo 2 (cantidad): ";
                            int cant2;
                            cin>>cant2;
 int arr2[cant2];
                                    for(int i= 0;i<cant2;i++){
                                        cout<<i+1<<". ";
                                        cin>>arr2[i];
                                    };

do{
cout<< "----------------------------------------"<<endl;
cout<< "                Conjuntos               "<<endl;
cout<< "----------------------------------------"<<endl;
//Here the pc outputs the arrays
                             cout<<"Arreglo 1: [";
                              for(int i= 0;i<cant1;i++){
                                    if( i==cant1-1){
                                        cout<<arr1[i];
                                    }else{
                                        cout<<arr1[i]<<",";
                                    };
                              };
                                cout<<"]"<<endl;
                                cout<<"Arreglo 2: [";
                              for(int i= 0;i<cant2;i++){
                                    if( i==cant2-1){
                                        cout<<arr2[i];
                                    }else{
                                        cout<<arr2[i]<<",";
                                    };
                              };
                                cout<<"]"<<endl;
 // !!!!!
cout<< "----------------------------------------"<<endl;

  opc = menu(opciones, 6);
  switch( opc ){
    case 1: unido(); break;
    case 2: interconjunto(); break;
    case 3: diferencia(); break;
    case 4: simetrica();break;
    case 5: pertenece();break;
    case 6: contenido();break;
  };
}while(opc!=0);
cout <<" ------------------------------------------"<<endl;
cout <<"               MENU PRINCIPAL              "<<endl;
cout <<" ------------------------------------------"<<endl;
};

ユーザーがメニューで選択を選択すると、main.cpp内でvoid()関数が呼び出されます

void unido(){
  cout<< "----------------------------------------"<<endl;
  cout<< "El arreglo union de ambos conjuntos es: "<<endl;
  cout<< unido(arr1,cant1,arr2,cant2);
};

そして、そのvoid関数は、.hの助けを借りて、aux cppを介して関数を呼び出します。

   #ifndef CONJUNTOS_H_INCLUDED
#define CONJUNTOS_H_INCLUDED
int* unido(int* arr1,int cant1,int* arr2, int cant2);

#endif // CONJUNTOS_H_INCLUDED

Heres aux cpp

   #include <iostream>
#include "Enteros.h"
#include "Reales.h"
#include "Char.h"
#include "Conjuntos.h"
using namespace std;
int* unido(int* arr1,int cant1,int*arr2,int cant2){
    cout<<"cant1";
    return 0;
};

私の質問はvoid conjuntos() メニューはどこですか、配列があり、このメニューによって呼び出される各関数でそれらを使用する必要がありますが、void unido() それは、arr1、cant1、arr2、およびcant2が関数で指定されていないことを示しています。conjuntos ** ** unido上のメニュー 関数?

回答 1 件
  • オブジェクトを使用して配列を含める必要があると思う、それはコードをより明確にし、他の人が言及したように、std :: vector /(std :: array)/ std :: string:を使用方法を学んだ後、これらは非常に優れた抽象化レベルを提供することがわかります。

    次に、function1によって変更され、function2によって使用されるオブジェクトをC ++で作成する場合は、次の操作を実行できます。

    void function1(MyObject & o) {...}
    void function2(MyObject const & o) {...}
    int main() {
        MyObject o;
        function1(o); // function1 must take the object by reference to be able to modify it.
        function2(o); // function2 can take the object by const reference if no modification is required.
        return 0;
    }
    
    

    または、次のように、最初の関数でオブジェクトを作成して返すこともできます。

    MyObject function1() {...}
    void function2(MyObject const & o) {...}
    int main() {
        MyObject o = function1();
        function2(o); // function2 can take the object by const reference if no modification is required.
        return 0;
    }
    
    

あなたの答え