OS kompilieren: Windows 7 64bit
IDE: Qt Creator 5.7.0 (32 Bit)
Compiler: MinGW 5.3.0 (32 Bit)
C++, Zeitfehler "keine Übereinstimmung für 'Operator []' (Operandentypen sind 'someclass *' und 'someclass')"
Als Vorwort, das ist eine Übung, um mir zu helfen einige Hinweise/Klassen Mechanik zu verstehen, so bool no = 1;
, ich möchte nicht verwenden <vector>
s noch andere easyToUse
Werkzeuge.
Ich versuche, ein [Array von Zeigern auf someClass
Typ Objekte] als Argument einer Funktion übergeben. Der ganze Code ist zu lang, um alles hier einzufügen, also poste ich einfach eine vereinfachte Version der Teile, die mit dem Fehler zusammenhängen.
Hier den Code (die relevanten Teile):
class someClass
{
public:
someClass(){;}
someClass(unsigned int classConstructorArgIn);
~someClass(){;}
}
someClass:someClass(unsigned int classConstructorArgIn)
{
//does stuff
}
void theFunction(someClass *arClassesIn, unsigned int arElementsIn);
int main()
{
unsigned int arElements = someOperationsResult; //cant really write down how I calculate this value, you can test it with a const value, if you have to
someClass *arClasses[arElements] = {0}; //array of pointers to instances of someClass (allegedly!)
theFunction(arClasses[arElements], arElements); //BTW::I had to write the argument this way, otherwise it says the definition doesnt match any declaration
//Furthermore, I dont understand what kind of value I should actually type in there, whether the index of the first element (0) or the size of the array (arElements)
return 0;
}
void theFunction(someClass *arClassesIn, unsigned int arElementsIn)
{
unsigned int classConstructorArg = 0;
for (unsigned int i = 0; i < arElements; i++)
{
classConstructorArg = someOtherOperationsResult;
arClassesIn[(someClass)i] = new someClass(classConstructorArg); //ERROR::"no match for 'operator[]' (operand types are 'someClass*' and 'someClass')"
//For some reason that I dont understand, I had to cast the [i]ndex to (someClass) type, otherwise I get a whole bunch of errors about type conversion
}
}
* Ich möchte weder noch andere easyToUse-Tools verwenden * - Sie müssen das Programm trotzdem schreiben, egal ob das Tool "einfach" ist oder nicht. Es ist nicht so, als würde die Verwendung von 'vector' das Programm auf magische Weise für Sie schreiben. –
PaulMcKenzie
@PaulMcKenzie Warum, habe ich es nicht geschrieben? '' s sollen die Verwendung von Arrays einfacher und sicherer machen, oder habe ich das falsch verstanden? –
Wirklich, selbst wenn Sie nach einem [mcve] suchen, indem Sie Dinge entfernen, die den Fehler nicht beeinflussen, besteht eine Möglichkeit darin, dass Sie mit etwas wie 'class someClass {}; someClass obj = neu someClass(); '. Es gibt Ihnen den gleichen Fehler wie die Verwendung von 'i' für den Index (was der logischere Ansatz ist, wie Sie gesagt haben, und sowohl das als auch Casting auf' someClass' geben Fehler, also ...) macht es viel einfacher zu sehen, warum es scheitert. – chris