| Autor |
Beitrag |
P4o3n1x
Hält's aus hier
Beiträge: 7
Win XP, Kubuntu 8.04
C#, Java, Delphi
|
Verfasst: Do 10.06.10 16:06
Hallo,
ich habe gerade eine kleine Auseinandersetzung mit meinem Compiler, die ich nicht ganz verstehe:
ich habe eine ABC (abstract base class) erstellt, die ich mal AlgebraicValue genannt habe. Das Interface sieht (grob gekürzt) etwa so aus:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| class AlgebraicValue { protected: const char deftype; public: AlgebraicValue( void ) : deftype( 0 ) { }
virtual AlgebraicValue* foo( AlgebraicValue const& ) = 0; }; |
Soweit ich das erkennen kann, soweit keine Probleme. Nun leite ich eine Klasse Fraction von AlgebraicValue ab und möchte meine Konstante deftype von der ich dachte dass sie durch den Zusatz protected in abgeleiteten Klassen sichtbar sein müsste im Konstruktor von Fraction setzen:
C#-Quelltext 1: 2: 3: 4: 5:
| Fraction::Fraction( int a = 0, int b = 1 ) : deftype( 1 ) { } |
Ich bekomme beim Kompilieren jedoch die Fehlermeldung:
Quelltext 1:
| class 'Fraction' does not have any field named 'deftype' |
Das ist für mich nicht nachvollziehbar. Ich wäre für jeden der mich hier auf die richtige Fährte locken könnte sehr dankbar! Moderiert von Christian S.: Topic aus C# - Die Sprache verschoben am Do 10.06.2010 um 16:56
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 10.06.10 16:26
Das ist kein C# 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: Do 10.06.10 16:39
Augenscheinlich handelt es sich hier um ein C++-Problem. Zusätzlich zum verfehlten Forum kann ich außerdem keine praktische Relevanz des Problems erkennen - die Konstante soll anscheinend der Identifizierung der Klasse dienen; als "beschützte" Variable ist diese jedoch außerhalb der Klasse (in der man ja sowieso weiß wer man ist) nicht ansprechbar!
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Do 10.06.10 16:48
Ich würde einfach mal behaupten der Threadersteller hat vergessen Fracction von seiner Basisklasse abzuleiten ^^
|
|
P4o3n1x 
Hält's aus hier
Beiträge: 7
Win XP, Kubuntu 8.04
C#, Java, Delphi
|
Verfasst: Do 10.06.10 16:54
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Do 10.06.10 17:06
Hey,
ich bin mir nich ganz sicher, aber ich schreib ma was ich vermute: C#-Quelltext 1: 2: 3:
| public: AlgebraicValue( void ) : deftype( 0 ) { } | ist doch keine normale Variable, sonder mehr sowas wie ne Eigenschaft/Property und ich denk da liegt das Problem. Definier dir die Variable mal im private Teil un nenn sie bisl anders. Und dann erstellst du die Eigenschaft der Klasse, in dem du auf die Variable zugreifst, dann sollte das auch in den Kind-Klassen gehen. So in etwa wie HIER erklärt.
Un dann is mir noch aufgefallen, das du deiner const char deftype; gar kein Wert zugewiesen hast, geht das?!
€: hab grad gemerkt, dass das ja der Konstruktor is, un du da die const Initialisieren willst. Eine const is eine const, da kammer nix rein schreiben, also steig auf eine Variable um, die nur in der Klasse sichtbar is...
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
P4o3n1x 
Hält's aus hier
Beiträge: 7
Win XP, Kubuntu 8.04
C#, Java, Delphi
|
Verfasst: Do 10.06.10 17:16
Bergmann89 hat folgendes geschrieben : |
ich bin mir nich ganz sicher, aber ich schreib ma was ich vermute: C#-Quelltext 1: 2: 3:
| public: AlgebraicValue( void ) : deftype( 0 ) { } | ist doch keine normale Variable, sonder mehr sowas wie ne Eigenschaft/Property und ich denk da liegt das Problem.
[...]
€: hab grad gemerkt, dass das ja der Konstruktor is, un du da die const Initialisieren willst. Eine const is eine const, da kammer nix rein schreiben, also steig auf eine Variable um, die nur in der Klasse sichtbar is... |
Ich arbeite mit einer Initialisierungsliste ( INFO). Das ist an sich schon korrekt. Ich vermute auch, dass es Probleme mit dem const-Tag gibt - ich hätte hier jedoch gerne eine Konstante und ich muss sie in der base class definieren da ich wie fidionael schon richtig erkannt hat zur Typerkennung verwenden möchte.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Do 10.06.10 17:25
Hey,
also mach meinem Wissen kann man da nur Variabelen initialisieren. Also musst du wohl leider eine Variable nehmen, aber ich hab auch noch DAS gefunden, vlt hilft die das iwie weiter...
€: Hey, hab das grad ma bei mir ausprobiert, und es scheit doch mit const zu gehen:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| #include <iostream>
using namespace std;
class AlgebraicValue { public: const int deftype; AlgebraicValue( void ); };
AlgebraicValue::AlgebraicValue(): deftype(1) {
}
int main(int argc, char *argv[]){ AlgebraicValue blaa; cout << blaa.deftype; cin.get(); return 0; } |
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
P4o3n1x 
Hält's aus hier
Beiträge: 7
Win XP, Kubuntu 8.04
C#, Java, Delphi
|
Verfasst: Do 10.06.10 21:26
Bergmann89 hat folgendes geschrieben : | Hey,
also mach meinem Wissen kann man da nur Variabelen initialisieren. Also musst du wohl leider eine Variable nehmen, aber ich hab auch noch DAS gefunden, vlt hilft die das iwie weiter...
€: Hey, hab das grad ma bei mir ausprobiert, und es scheit doch mit const zu gehen:
|
Ich sagte doch bereits dass das funktioniert. Wenn du nochmal meinen ersten Post liest, wirst du feststellen, dass ich sagte in AlgebraicValue treten keine Probleme auf. Das Problem ergibt sich erst bei Ableitung einer Klasse von AlgebraicValue.
Ich bin nach wie vor leider keinen Schritt weiter.
Edit: Dein Link scheint ein möglicher Work-around zu sein, ich fände jedoch die const-Lösung eleganter und wüsste immer noch gerne warum sie nicht funktioniert...
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 11.06.10 00:26
Hey,
sry da hab ich mal wieder zu schnell gelesen ^^
Also ich bekomms bei mir nur mit der Variable zum laufen. Ich bin aber auch erst Anfänger in C&Co, vlt solltest du deine Frage nochma in einem C-Forum stellen...
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
P4o3n1x 
Hält's aus hier
Beiträge: 7
Win XP, Kubuntu 8.04
C#, Java, Delphi
|
Verfasst: Fr 11.06.10 16:10
|
|
|