|
I have commented out all the parts of your code that are not needed to create a simple test. The result is as follows:
#include<iostream>
#include<string>
using namespace std;
class anagrafica
{
private:
string nome_cifrato;
string cognome_cifrato;
int chiave_cifratura;
public :
anagrafica(string a, string b, int c);
void setChiave(int);
void print();
};
#include "Anagrafica.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
anagrafica::anagrafica(string a, string b, int c) {
nome_cifrato = a;
cognome_cifrato = b;
chiave_cifratura = c;
}
void anagrafica::setChiave(int a)
{
chiave_cifratura = a;
}
void anagrafica::print()
{
cout << nome_cifrato << " " << cognome_cifrato << " " << chiave_cifratura << endl;
}
int main()
{
int N = 4;
anagrafica** Arr_ = new anagrafica*[N];
for (int i = 0; i < N; i++)
{
Arr_[i] = new anagrafica("ciao", "miao", i*25);
}
for (int i = 0; i < N; i++)
{
Arr_[i]->print();
}
}
|
|
|
|
|
Ok , so the syntax is not
Arr_[i].setChiave(3)
but
Arr_[i]->setChiave(3)
as per Greg Utas and your new indication.
As I wrote I would say that also the version
<pre>anagrafica* Arr_ = new anagrafica[N];
for (int i = 0; i < N; i++)
{
Arr_[i] = anagrafica("ciao", "miao", i*25);
}
is working the same. Then I have the further problem of the two methods for setting cifrated name and surname tha have no effects.
I see that there is some problem of synchronizations with the replies. But ok syntax has been clarified.
|
|
|
|
|
You have declared a number of methods in your header file but you have not added their implementation to the .cpp source. In my sample code above you can see the implementation for the setChiave method. You need to do the same for all the other methods declared in the class.
|
|
|
|
|
I attach the method file .cpp
#include "Anagrafica.h"
#include <iostream>
#include <string>
using namespace std;
anagrafica::anagrafica(string name,string surname, int key)
{
nome_cifrato=name;
cognome_cifrato=surname;
chiave_cifratura=key;
}
void anagrafica::setNome(string n_)
{
nome_cifrato=n_;
}
void anagrafica::setCognome(string c_)
{
cognome_cifrato=c_;
}
string anagrafica::getNome()
{
return nome_cifrato;
}
string anagrafica::getCognome()
{
return cognome_cifrato;
}
int anagrafica::getChiave()
{
return chiave_cifratura;
}
void anagrafica::setChiave(int c)
{
chiave_cifratura=c;
}
void anagrafica::stampa()
{
string nom = nome_cifrato;
string cog = cognome_cifrato;
cout<<" nome cifrato "<<nom;
cout<<" cognome cifrato "<<cog<<endl;
}
void anagrafica::codifica(string nome_chiaro, string cognome_chiaro, int chiave)
{
char car;
nome_cifrato = "";
cognome_cifrato = "";
for (int i=0;i <nome_chiaro.length();i++)
{
car = nome_chiaro[i] + chiave;
nome_cifrato = nome_cifrato + car;
cout<<"carattere "<<i<<" n in chiaro "<<nome_chiaro[i]<<" chiave "<<chiave<<" cifrato "<<car<<" nome incostruzione "<<nome_cifrato<<endl;
}
setNome(nome_cifrato);
for (int i=0; i<cognome_chiaro.length();i++)
{
car = cognome_chiaro[i] + chiave;
cognome_cifrato = cognome_cifrato + car;
cout<<"carattere "<<i<<" c in chiaro "<<cognome_chiaro[i]<<" chiave "<<chiave<<" cifrato "<<car<<" cognome incostruzione "<<cognome_cifrato<<endl;
}
setCognome(cognome_cifrato);
}
void anagrafica::decodifica()
{
char car;
string nome_chiaro = "";
string cognome_chiaro = "";
for (int i=0;i <nome_cifrato.length();i++)
{
car = nome_cifrato[i] - chiave_cifratura;
nome_chiaro = nome_chiaro + car;
cout<<"carattere "<<i<<" n in cifrato "<<nome_cifrato[i]<<" chiave "<<chiave_cifratura<<" chiaro "<<car<<" nome incostruzione "<<nome_chiaro<<endl;
}
cout<<" nome in chiaro "<<nome_chiaro;
for (int i=0; i<cognome_cifrato.length();i++)
{
car = cognome_cifrato[i] - chiave_cifratura;
cognome_chiaro = cognome_chiaro + car;
cout<<"carattere "<<i<<" c in cifrato "<<cognome_cifrato[i]<<" chiave "<<chiave_cifratura<<" chiaro "<<car<<" cognome incostruzione "<<cognome_chiaro<<endl;
}
cout<<" cognome in chiaro "<<cognome_chiaro<<endl;
}
I can't understand where is the error.
|
|
|
|
|
Clarified the syntax problem I resume here.
The code works also in this way ::
anagrafica* Arr_ = new anagrafica[N];
for (int i = 0; i < N; i++)
{
Arr_[i] = anagrafica("ciao", "miao", i*25);
}
for (int i=0; i<N; i++)
{
file>>chiave;
file>>n;
file>>c;
Arr_[i].setChiave(chiave);
cod(Arr_[i],n,c,chiave);
}
for (int i=0; i<N; i++)
Arr_[i].stampa();
Because I can see all the Arr_ elements containing instances of the class. But two methods recalled from one other method do not heve effects.
|
|
|
|
|
I think this thread is getting confused (I certainly am). I suggest you start a new thread and post the actual code that you are now using, and explain what methods do not work.
|
|
|
|
|
header
#include<iostream>
#include<string>
using namespace std;
class anagrafica
{
private:
string nome_cifrato;
string cognome_cifrato;
int chiave_cifratura;
public :
anagrafica(string ="", string ="", int=0);
void setNome(string );
void setCognome(string );
string getNome();
string getCognome();
void codifica(string , string , int );
void decodifica();
void setChiave(int);
int getChiave();
void stampa();
};
methods
#include "Anagrafica.h"
#include <iostream>
#include <string>
using namespace std;
anagrafica::anagrafica(string name,string surname, int key)
{
nome_cifrato=name;
cognome_cifrato=surname;
chiave_cifratura=key;
}
void anagrafica::setNome(string n_)
{
nome_cifrato=n_;
}
void anagrafica::setCognome(string c_)
{
cognome_cifrato=c_;
}
string anagrafica::getNome()
{
return nome_cifrato;
}
string anagrafica::getCognome()
{
return cognome_cifrato;
}
int anagrafica::getChiave()
{
return chiave_cifratura;
}
void anagrafica::setChiave(int c)
{
chiave_cifratura=c;
}
void anagrafica::stampa()
{
string nom = nome_cifrato;
string cog = cognome_cifrato;
cout<<" nome cifrato "<<nom;
cout<<" cognome cifrato "<<cog<<endl;
}
void anagrafica::codifica(string nome_chiaro, string cognome_chiaro, int chiave)
{
char car;
nome_cifrato = "";
cognome_cifrato = "";
for (int i=0;i <nome_chiaro.length();i++)
{
car = nome_chiaro[i] + chiave;
nome_cifrato = nome_cifrato + car;
cout<<"carattere "<<i<<" n in chiaro "<<nome_chiaro[i]<<" chiave "<<chiave<<" cifrato "<<car<<" nome incostruzione "<<nome_cifrato<<endl;
}
setNome(nome_cifrato);
for (int i=0; i<cognome_chiaro.length();i++)
{
car = cognome_chiaro[i] + chiave;
cognome_cifrato = cognome_cifrato + car;
cout<<"carattere "<<i<<" c in chiaro "<<cognome_chiaro[i]<<" chiave "<<chiave<<" cifrato "<<car<<" cognome incostruzione "<<cognome_cifrato<<endl;
}
setCognome(cognome_cifrato);
}
void anagrafica::decodifica()
{
char car;
string nome_chiaro = "";
string cognome_chiaro = "";
for (int i=0;i <nome_cifrato.length();i++)
{
car = nome_cifrato[i] - chiave_cifratura;
nome_chiaro = nome_chiaro + car;
cout<<"carattere "<<i<<" n in cifrato "<<nome_cifrato[i]<<" chiave "<<chiave_cifratura<<" chiaro "<<car<<" nome incostruzione "<<nome_chiaro<<endl;
}
cout<<" nome in chiaro "<<nome_chiaro;
for (int i=0; i<cognome_cifrato.length();i++)
{
car = cognome_cifrato[i] - chiave_cifratura;
cognome_chiaro = cognome_chiaro + car;
cout<<"carattere "<<i<<" c in cifrato "<<cognome_cifrato[i]<<" chiave "<<chiave_cifratura<<" chiaro "<<car<<" cognome incostruzione "<<cognome_chiaro<<endl;
}
cout<<" cognome in chiaro "<<cognome_chiaro<<endl;
}
main
#include "Anagrafica.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void cod (anagrafica arr,string n, string c,int chiave)
{
arr.codifica(n,c,chiave);
}
void decod (anagrafica arr)
{
arr.decodifica();
}
int main()
{
ifstream file; file.open("input.txt");
int N;
string n,c;
int chiave;
int chiave_input;
file>>N; cout<<N<<endl;
anagrafica* Arr_ = new anagrafica[N];
for (int i = 0; i < N; i++)
{
Arr_[i] = anagrafica("ciao", "miao", i*25);
}
for (int i=0; i<N; i++)
{
file>>chiave;
file>>n;
file>>c;
Arr_[i].setChiave(chiave);
cod(Arr_[i],n,c,chiave);
}
for (int i=0; i<N; i++)
Arr_[i].stampa();
cout<<"inserire un valore intero"<<endl;
cin>>chiave_input;
for (int i=0; i<N; i++)
{
cout<<" chiave "<< Arr_[i].getChiave()<<endl;
if(chiave_input== Arr_[i].getChiave())
decod(Arr_[i]);
}
}
That's it.
Highlighted, within method "codifica", the call to the two methods setNome and setCognome that do not work (they do not set any name and surname). The two cout inside "codifica" are only to understand what happens.
The txt file from where to take the data to process is made like this
2 (means how many rows follows)
key1 name1 surname1
key2 name2 surname2
|
|
|
|
|
You need to execute that code through the debugger to see exactly what is happening. I tried to reproduce it and it was passing blank parameters in to the method. I suspect that the problem is where you are reading values from the input file.
[edit]
That method is modifying both variables nome_cifrato and cognome_cifrato inline, and you then call setNome and setCognome . But you have already modified the names so you do not need to call the setter methods. I think you need to look more closely at the design of this application and remove some of the redundancies.
modified 9-Sep-22 6:00am.
|
|
|
|
|
Ok you are right saying that
Richard MacCutchan wrote: That method is modifying both variables nome_cifrato and cognome_cifrato inline, and you then call setNome and setCognome. But you have already modified the names so you do not need to call the setter methods.
I didn't see it, I get confused writing the code, probably I inteded to use local variables to build cifrated name and surname.
But problem was in this function within the main
void cod (anagrafica arr,string n, string c,int chiave)
{
arr.codifica(n,c,chiave);
}
that i re-arranged this way
void cod (anagrafica &arr,string n, string c,int chiave)
{
arr.codifica(n,c,chiave);
}
passing the address to "cod". And about this, I understood the reason (Greg Utas was right about the rules but didn't apply to the real problem because i did not need to change the strings passed to the methods but the instance of the class itself). But now there is another behaviour that confuses me :
In a previous version the following method :
void anagrafica::stampa()
{
cout<<" nome cifrato "<<nome_cifrato;
cout<<" cognome cifrato "<<cognome_cifrato<<endl;
}
I had to modify in this new version :
void anagrafica::stampa()
{
string nom = nome_cifrato;
string cog = cognome_cifrato;
cout<<" nome cifrato "<<nom;
cout<<" cognome cifrato "<<cog<<endl;
}
because in the first version it was just printing nothing. Now it prints correctly. I just tried without a real knowledge behind, only some kind of sensation but I don't understand why it didn't work before and why it works now.
Anyway thanks for all the efforts/suggestions. I am just starting with c++ in order to help my children in their school exercise.
modified 10-Sep-22 3:10am.
|
|
|
|
|
Roberto64_Ge wrote: I am just starting with c++ in order to help my children in their school exercise. Well, I am sorry to have to say this, but what you have created is not a good example of C++ code for them to follow. The two static methods cod and decod serve no purpose other than to call the actual methods of the anagrafica class. So they are totally redundant; you could call the codifica method direct from main . There are a number of other issues that look incorrect to me but I do not have time to teach you C++.
|
|
|
|
|
That was a request (strange to me too. Exercise : implement a function that calls the methods ..., not directly in the main. Could also be that it was some type of cut and paste from other exercises so some error in the exercise definition ). As I said I am starting too so I do what I can and for that reason I am writing here otherwise why should I do this (to ask a forum)? Then I think that everyone is doing something makes mistakes some for distraction (some I did here) and some for poor knowledge (and also here).
But going straight to my last question is there an explanation?
Regards
|
|
|
|
|
I have no idea where that question came from or what it actually says. But I would assume that if you want an explanation then the place where you found it is the best place to ask. The forums here are more for help in diagnosing and fixing specific problems. There are other sites that offer well written tutorials, such as Learn C++ – Skill up with our free tutorials[^] and C++ Tutorial[^].
|
|
|
|
|
A project about cars, a library, a pharmacy, a clinic, or ....Etc
Since this project has more than one class
In the project, it has at least 3 properties ( attributes) and contains functions (methods )
Yeshti applied all the concepts of oop in this project
We build at least 5 classes in the project and in each class we apply complex relationships to it and apply the uml scheme to it
It is necessary that in a project report we explain in the report the characteristics of the project, the functions and the goal of the project ,
We use the comments in the editor, in which we explain the description of the functions and the action of each function with an appropriate expression .
The functions we convert to string, and use the principle of inheritance with the determination of private and public variables . It must be in the builder function and the copier function .
And we use get and set
|
|
|
|
|
Very interesting, but you forgot to ask a question.
|
|
|
|
|
C++ doesn't have get and set , although you can provide functions with those names. Are you sure this isn't supposed to be C#?
But in the greater scheme of things, it sounds like you're asking for someone to do your assignment, which is something that rarely happens on this site, and certainly not for something of this size.
|
|
|
|
|
Coding?
"In testa che avete, Signor di Ceprano?"
-- Rigoletto
|
|
|
|
|
Message Closed
modified 15-May-23 19:06pm.
|
|
|
|
|
QStringList params = QStringList() << "qterminal" << "-e" << "bluetoothctl help"
The rude tone of your question would not have deserved an answer but maybe you'll learn to be polite.
Mircea
|
|
|
|
|
Message Closed
modified 15-May-23 19:06pm.
|
|
|
|
|
We are getting your rants, and you are not getting what you want, because you keep asking the same questions and people don't keep track of someone who goes by just a "number".
The bottom line is: This is NOT a "bluetooth" (expert) site, and all your ranting won't change that. If there is one here (an expert), he may not care to contribute under the circumstances; and that's their choice.
You may not realize it, put people do not knowingly volunteer a "wrong" answer. If you don't like the answer, or have heard it before, keep it to yourself. You create a thread; expect different answers; deal with it (and this post).
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
Member 14968771 wrote: The att6ached code is being posted here because
it is C++ code No, it has nothing to do with C++, it is purely a QT/qterminal issue. And this is the C/C++ forum.
In your code ...
QString exec = "qterminal";
QStringList params = QStringList() << "qterminal" << "-e" << "bluetoothctl" ; processTERMINAL->start(exec, params);
... you are passing "qterminal" as the first parameter to "qterminal" . So remove that field from your params .
And that is still not a C++ issue.
modified 5-Sep-22 4:30am.
|
|
|
|
|
Message Closed
modified 15-May-23 19:06pm.
|
|
|
|
|
Did you try to compare your these two "usages" to see the difference between them?
|
|
|
|
|
|
Quote: 1. I thought 'foreach" was a C++ "feature" - in QT doc they call it macro "Q_FOREACH" -
not sure which way is up... Then you were wrong. C++ has NO foreach construct, however, it provides the range-based for , see Range-based for loop (since C++11) - cppreference.com[^].
Quote: 2. The syntax
foreach(QString str, StringArray[MAX_ARRAY]) I cannot find the StringArray class in QT documentation. Do you meant QStringList Class | Qt Core 6.3.2[^]?
On the other hand, if you use a (C -like) array of QString s, then you could use the C++ range-based for .
"In testa che avete, Signor di Ceprano?"
-- Rigoletto
|
|
|
|
|