[C++] invalid conversion from char to char*

Pagina: 1
Acties:

  • CyberArt
  • Registratie: Mei 2004
  • Laatst online: 10-08-2011
Ik gok er op dat mijn probleem een vrij basis probleem is, en toch heb ik na zoeken op google, c++ websites/forum en got nog geen antwoord kunnen vinden.
Ik ben ook nog niet zo erg ervaren met c++ maar probeer vooral te leren van voorbeelden, die zelf aan de praat te krijgen en aan te passen. Intussen heb ik wel wat basis tutorials gelezen, maar om een of andere reden ben ik nog geen site tegen gekomen waar het gebruik van chars en ints en wat je waarmee mag doen goed wordt uitgelegd.

Ik zit met de volgende code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include "aw.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <fcntl.h>
#include <string.h>
#include <fstream>
#include <iostream>
#include <cctype>

using namespace std;

int rc;

char chattext;
char chatname;
char message;
char logtmp;
char logfile;

void handle_avatar_add (void);
void handle_avatar_delete (void);
void handle_chat (void);
void add_to_file (char message);

main (int argc, char *argv[])
{

  strcpy (logfile, "test.log");

  /* check command line */
  if (argc < 3) {
    cout << "Usage: " << argv[0] << " citnum privpass world" << endl;
    exit (1);
  }

  /* initialize Active Worlds API */
  if (rc = aw_init (AW_BUILD)) {
    cout << "Unable to initialize API (reason " << rc << ")" << endl;
    exit (1);
  }

  /* install handler for avatar_add event */
  aw_event_set (AW_EVENT_AVATAR_ADD, handle_avatar_add);
  aw_event_set (AW_EVENT_AVATAR_DELETE, handle_avatar_delete);
  aw_event_set (AW_EVENT_CHAT, handle_chat);

  /* create bot instance */
  if (rc = aw_create ("aw.l3d.nl", 5670, 0)) {
    cout << "Unable to create bot instance (reason " << rc << ")" << endl;
    exit (1);
  }

  /* log bot into the universe */
  aw_int_set (AW_LOGIN_OWNER, atoi (argv[1]));
  aw_string_set (AW_LOGIN_PRIVILEGE_PASSWORD, argv[2]);
  aw_string_set (AW_LOGIN_APPLICATION, "L3D-lode-logbot");
  aw_string_set (AW_LOGIN_NAME, "ChatBot");
  if (rc = aw_login ()) {
    cout << "Unable to login (reason " << rc << ")" << endl;
    exit (1);
  }

  /* log bot into the world */
  if (rc = aw_enter (argv[3])) {
    cout << "Unable to enter world (reason " << rc << ")" << endl;
    exit (1);
  }

  /* announce our position in the world */
  aw_int_set (AW_MY_X, 1000); /* 1W */
  aw_int_set (AW_MY_Z, 1000); /* 1N */
  aw_int_set (AW_MY_YAW, 2250); /* face towards GZ */
  if (rc = aw_state_change ()) {
    cout << "Unable to change state (reason " << rc << ")" << endl;
    exit (1);
  }

  /* main event loop */
  while (!aw_wait (-1))
    ;

  /* close everything down */
  aw_destroy ();
  aw_term ();
  return 0;

}

void handle_avatar_add (void)
{

  strcpy (chatname, aw_string (AW_AVATAR_NAME));
  sprintf (message, "\t[enter: %s]", chatname);
  add_to_file (message);
  /* log the event to the console */
  cout << "\t[enter: " << chatname << "]" << endl;

}
void handle_avatar_delete (void)
{

  strcpy (chatname, aw_string (AW_AVATAR_NAME));
  sprintf (message, "\t[leave: %s]", chatname);
  add_to_file (message);
  /* log the event to the console */
  cout << "\t[leave: " << chatname << "]" << endl;

}
void handle_chat (void)
{

  strcpy (chatname, aw_string (AW_AVATAR_NAME));
  strcpy (chattext, aw_string (AW_CHAT_MESSAGE));
  sprintf (message, "%s:\t%s", chatname, chattext);
  add_to_file (message);
  /* log the event to the console */
  cout << chatname << ":\t" << chattext << endl;

}

void add_to_file (char message)
{
  ofstream add_to_file ("test.log", ios::app);
  if (!add_to_file.is_open()) {
    cout << "logfile \"test.log\" can't be opened \n";
    add_to_file.close();
    exit (1);
  }
  else {
    add_to_file<<message;
    add_to_file<<"\n";
    add_to_file.close();
  }
}

In de main loop gebeurt niet zo heel veel spannends, dat gaat ook prima. Het gaat mis bij de functions onderaan.
Hij geeft errors op de lijnen 29, 93, 94, 124, 125, 134, 135 en 136, allemaal dezelfde fout:
code:
1
error: invalid conversion from `char' to `char*'

Er zit dus iets goed fout in de "strcpy" en de "sprintf".

Ik begin het onbegrip bij mezelf voor die chars goed zat te worden :'(
Is er iemand die me hiermee verder kan helpen?

[ Voor 11% gewijzigd door CyberArt op 12-08-2005 02:12 . Reden: line# 50 moest line#29 zijn ]

hopende hiermee een post te hebben gemaakt, teken ik


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Je gebruikt chars terwijl die functies op je foute regels allemaal char pointers (char*), oftewel strings, verwachten. Declareer je variabelen als char* of geef het adres van de char door (maar liever dat eerste eigenlijk) om je probleem op te lossen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Bergie
  • Registratie: Augustus 2000
  • Laatst online: 16:25

Bergie

Lekker belangrijk...

CyberArt schreef op vrijdag 12 augustus 2005 @ 02:11:[...]
Ik begin het onbegrip bij mezelf voor die chars goed zat te worden :'(
Is er iemand die me hiermee verder kan helpen?
Volgens mij zit het onbegrip niet zozeer in de chars maar meer in het niet goed begrijpen en kunnen werken met pointers. Verdiep je daar eens wat meer in zou ik zeggen want als je C/C++ wil gaan coden zal je er nog veel vaker mee te maken krijgen :)

Yamaha MT-09


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

-NMe- schreef op vrijdag 12 augustus 2005 @ 02:16:
Je gebruikt chars terwijl die functies op je foute regels allemaal char pointers (char*), oftewel strings, verwachten. Declareer je variabelen als char* of geef het adres van de char door (maar liever dat eerste eigenlijk) om je probleem op te lossen. :)
Uhmm, een 'string' is null terminated. Als je daarvoor het adres van een char doorgeeft ga je vervelende crashes krijgen...

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Sowieso ga je vervelende crashes krijgen. char*s zijn ondingen. Gebruik liever std::string.
(en pak een compiler uit de 21e eeuw, main( ) moet return type int hebben.)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je moet van alle declaraties waar je nu een char hebt staan een pointer naar char van maken (char *) en daar vervolgens geheugen voor reserveren. Je kunt dat dynamisch en statisch doen. Pretty basic stuff, dat staat in elke C tutorial beschreven.

En als je met C++ wilt gaan werken (dat staat tenslotte in je topictitle), ga dan met C++ werken en niet allerlei C meuk met C++ meuk mixen. Dan kun je gewoon met std::string werken.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-05 21:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

en FYI: een char is dan ook maar één enkel teken. Een 'string' bestaat uit meerdere tekens en dus wordt dat meestal gerepresenteerd met een array van chars. Arrays doorgeven gaat in C/C++ door de pointer naar het eerste element te geven, en dat maakt dus de bekende char*. Maar zoals gezegd moet je zelf de memory van die arrays managen, en het is daarom handiger om een std::string te gebruiken die dat allemaal voor je encapsuleert in een enkel object.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1