Avatar billede hrc Mester
11. november 2003 - 12:51 Der er 6 kommentarer og
1 løsning

GNU C++ under KDevelop

Udviklingsmiljø:
----------------
KDevelop 2.1, Redhat 7.3, gcc 2.96


Funktionen:
--------------------
void print_message(char name[], char type[], char msg[] = "") {
  clog << endl << PrintTime() << " [" << name << " |"<< type << "] " << msg;
}

og kommandoen:
--------------
print_message("NOOP","E","exiting");


Endelig er der advarslen:
-------------------------
main.cpp:343: warning: deprecated conversion from string constant to 'char *'


Desværre kan jeg ikke debugge uden at -Wall flaget bliver sat og så kommer der en zillion af disse advarsler - og det irriterer mig ærlig talt. Synes jeg har prøvet alt uden held.

Har det noget med om man inkluderer <string> eller <string.h>? Der er en eller anden forskel her, ikke?. Her inkluderers <string> og <iostream>.

(ArneC kan sikkert genkende problemet fra et indlæg som jeg ikke har fået givet ham points for - det kommer, bare rolig)
Avatar billede conrad Nybegynder
11. november 2003 - 13:50 #1
hvad med std::string s = name; og så skrive s ud?
Avatar billede conrad Nybegynder
11. november 2003 - 14:01 #2
mht til forskellen på include.h og <include> så spurgte jeg selv om det her
http://www.eksperten.dk/spm/411555
Avatar billede segmose Nybegynder
11. november 2003 - 14:51 #3
Hej HRC
  Hvis name er en const i kaldet, men ikke i parameteren, prøv:

void print_message(const char name[], const char type[], const char msg[] = "")

Iøvrigt må du have en masse andre problemer hvis -Wall giver en zillion fejl meldinger, prøv at poste et lille udvalg af dem, måske laver du mange unødige type converteringer, nogle med risiko for precisions tab, var overførsler, temporære object etc.
Avatar billede hrc Mester
11. november 2003 - 15:09 #4
Conrad: Jeg har nu prøvet at rettet det fra (char *) til string, men jeg er bekymret over al den allokering og deallokering. Ville gerne kunne sende pr. reference (&), men det er konstanter jeg sender. Sådan som jeg læser programmet nu, så oprettes der 3 string objekter som frigives igen efter kaldet. Det er spild af god og dyrbar CPU-tid. Ret mig venligst hvis jeg tager fejl.

I dit indlæg spurgte du - der blev i alt fald svaret - om forskellen mellem at bruge <> og "" og det er rigtig nok hhv. at kigge i et compiler include katalog og at kigge i det pågældende udviklingskatalog.

i øvrigt kom følgende advarsel i forbindelse med at jeg har en default værdi nogle parametre i bl.a. void Program::ErrorOccured(string ErrorMessage = "");

warning: default argument given for parameter 1 of `void DKLogic::ErrorOccured (basic_string, __default_alloc_template > = "")' - Hvordan laver man en default værdi på et strengargument?


Segmose: Jeg har prøvet dit løsningsforslag, men faktisk er det den eneste advarsel der dukker op. Jeg har bare en masse debugmeddelelser rundt om i programmet (som kalder print_message, som giver fejlmeddelelsen)
Avatar billede hrc Mester
11. november 2003 - 15:09 #5
Conrad: Jeg har nu prøvet at rettet det fra (char *) til string, men jeg er bekymret over al den allokering og deallokering. Ville gerne kunne sende pr. reference (&), men det er konstanter jeg sender. Sådan som jeg læser programmet nu, så oprettes der 3 string objekter som frigives igen efter kaldet. Det er spild af god og dyrbar CPU-tid. Ret mig venligst hvis jeg tager fejl.

I dit indlæg spurgte du - der blev i alt fald svaret - om forskellen mellem at bruge <> og "" og det er rigtig nok hhv. at kigge i et compiler include katalog og at kigge i det pågældende udviklingskatalog.

i øvrigt kom følgende advarsel i forbindelse med at jeg har en default værdi nogle parametre i bl.a. void Program::ErrorOccured(string ErrorMessage = "");

warning: default argument given for parameter 1 of `void DKLogic::ErrorOccured (basic_string, __default_alloc_template > = "")' - Hvordan laver man en default værdi på et strengargument?


Segmose: Jeg har prøvet dit løsningsforslag, men faktisk er det den eneste advarsel der dukker op. Jeg har bare en masse debugmeddelelser rundt om i programmet (som kalder print_message, som giver fejlmeddelelsen)
Avatar billede hrc Mester
11. november 2003 - 15:10 #6
Mht. include så tænkte jeg på forskellem mellem at angive .h og ikke at gøre det.
Avatar billede segmose Nybegynder
11. november 2003 - 15:24 #7
Jeg tror nu at jeg forstår hvad compileren mener, du bruger en .h (c/gammel C++) fil som deprecated (betyder vist udgået) hvor du uden .h (Ny standard include fil) ikke ville få denne fejl, men måske nogle andre mere relevante.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester