I just compiled the following code and I get an error that I don't understand, the code is this:
Honestly, I don't quite understand what you mean because function calls are made like this.
I get the following error:
1 9 [Warning] #pragma once in main file
In function 'int main()':
36 20 [Error] expected primary-expression before 'void'
39 26 [Error] expected primary-expression before 'void'
the errors refer to these lines of code:
objeto.inversa(void);
objeto.concatenacion(void);
This is the code in question:
#pragma once
#include<iostream>
#include "operations.hpp"
#include<string>
using namespace std;
// el menu que visualizara el usuario
int main(void){
string cadena1;
string cadena2;
char opcion;
cout<<" Si quiere especificar la cadena vacia del lenguaje, ponga & , tampoco olvide las llaves para señalar el inicio y fin del lenguaje "<<endl;
cout<< "escriba los conjuntos del lenguaje "<<endl;
cin>>cadena1;
operaciones objeto(cadena1);
do {
cout<<" calculadora de lenguajes regulares "<< endl;
cout<<" 1.Inversa "<<endl;
cout<<" 2.Concatenacion "<<endl;
cout<<" 3.Union "<<endl;
cout<<" 4.Interseccion "<<endl;
cout<<" 5.Diferencia "<<endl;
cout<<" 6.Sublenguaje "<<endl;
cout<<" 7.Finalizar el programa "<<endl;
cout<<" Elija una opcion "<<endl;
cin>> opcion;
switch(opcion){
case 1:
objeto.inversa(void);
break;
case 2:
objeto.concatenacion(void);
break;
This is the reverse and concatenation code, which is in another file, that file was compiled and does not give errors, while the main file does.
void inversa(){ //devuelves un tipo de datos
set<string>::iterator it; // iterator es una clase que en funcion de la clase que la llama, crea un iterador que se adecue a esa clase, set su caracteristica es la posicion es el valor
char temporal;
char ite;
char iter;
for(it=lenguaje.begin(); it!=lenguaje.end();it++){ //con sets hay que utilizar iteradores, set es el conjunto, no se pueden usar []
//end es posicion de memoria,tiene direcciones que si las divides te da otras posiciones de memoria
int i=0;
int j=((*it).size() - 1); // el size del string que hay en esa posicion
//string tiene sobrecargado el operador corchete
for(ite=(*it)[i], iter=((*it)[j]); i<((*it).size()/2);i++,j--){ // ten en cuenta que it contiene cadena de caracteres, no puedes tratar iterador como vector, saber posicion intermedia
temporal=ite; //recuerda que son punteros de it, en el for estas apuntando a begin() y end() con ite e iter repectivamente
ite=iter;
iter=temporal;
}
}
write(lenguaje,cout);
}
void concatenacion (operaciones lenguaje2){ //no puedes tener dos objetos invocantes, uno lo pasas por parametros
set<string>::iterator it1;
set<string>::iterator it2;
char it3;
string resultado;
set<string> result;
for(it1=lenguaje.begin();it1!=lenguaje.end();it1++){
for(it2=lenguaje2.lenguaje.begin();it2!=lenguaje2.lenguaje.end();it2++){
if((*it1)== "&"){ // & cadena vacio si es un elemento, lo reconoce como un string
resultado=(*it2);
}
else{
resultado= (*it1);
if((*it2)!="&"){
int i=0;
for(it3=(*it2)[i];i<(*it2).size();i++){ //char coge los numeros como si fuesen char recuerda puedes quitar it3=(*it2)[i] y poner i=0 solo que vas a meter en el pus back *(it2)(i)
resultado.push_back(it3); //no estoy utilizando it3 como iterador, por eso quito el asterisco
}
}
}
result.insert(resultado);
}
}
write(result,cout);
}
your help is appreciated. Thank you
I am very sorry to inform you that no, function calls are not done like that.
void
You have plenty ofAdditionally, notice that you have declared
That function needs to be called with a parameter, and you're not passing any.