error C2065: 'x' : undeclared identifier

HORNSWOGGLE

C++ Beginner
Hi,

Hab hier ein Deklarations Problem, was ich nicht versteh, der Compiler sagt mir das "x" nicht deklariert währe, obwohl es oben im #define steht, wie soll ich das verstehen?:confused:

Code:
#include <iostream>
#include <conio.h>

#define SQRE1 (x) ((x) * (x)) //Quadrieren
#define SQRE2 (x) (x * x) //Quadrieren

using namespace std;

int main(void){
	int wert = 5;
	
	cout << "SQRE1 (wert): " << SQRE1(wert) << '\n';
	cout << "SQRE2 (wert): " << SQRE2(wert) << '\n';

	cout << "SQRE1 (wert+1): " << SQRE1(wert+1) << '\n';
	cout << "SQRE2 (wert+1): " << SQRE2(wert+1) << '\n';
	return 0;
	getch();
}
Der Compiler macht Meldung bei den "cout" Zeilen!
 
Moin,

also eine Variable 'x' mit irgendeinem Datentyp hast Du oben nicht deklariert ! So wie ich es sehe definierst Du nur 'SQREx' ....

Der Compiler weiß also nicht, dass er er 'Wert' für 'x' ersetzt werden soll!

Ich bin mir auch nicht sicher, dass das Ganze so gehen kann, Du vor den "defines" IMHO keine Variablen deklarieren kannst.
Kannst es ja aber mal testen ...

Gruß
Klaus
 
also eine Variable 'x' mit irgendeinem Datentyp hast Du oben nicht deklariert ! So wie ich es sehe definierst Du nur 'SQREx' ....

Der Compiler weiß also nicht, dass er er 'Wert' für 'x' ersetzt werden soll!

Das ist mir Klar aber,

ich hab das schon mit dem Deklarieren versucht, aber der schaft keine Verbindung, mit dem "x" vom #define oben und wirft beim Compile, 4 errors die sich auf die "cout" Lines beziehen aus:

error C2064: term does not evaluate to a function taking 1 arguments
error C2064: term does not evaluate to a function taking 1 arguments
error C2064: term does not evaluate to a function taking 1 arguments
error C2064: term does not evaluate to a function taking 1 arguments
 
Du hast Recht, jetzt gehts, :)

aber üblicherweise ist es doch egal wie weit entfernt es steht solange es in der richtigen Zeile ist oder irr ich mich oder ist das ein Bug, beabsichtigt?
 
Naja ich bin kein Compiler ;) aber ich denke mal du hast ja auch keine typische Funktion sondern ein Makro vor dir.

Aber wenn ich so darüber nachdenke ist ein Makro ja so definiert:
Code:
#define name ersatztext

Und wenn du nun die klammer nach einem Leerzeichen setzt ist es ja theoretisch schon der Ersatztext.
 
Teste doch auch mal diese Zeilen

Code:
	cout << "SQRE1 (wert++): " << SQRE1(wert++) << '\n';
	cout << "SQRE2 (wert++): " << SQRE2(wert++) << '\n';


In C++ wird oft auf Makros zugunsten von inline-Funktionen verzichtet.
 
Zurück