Xcode Fehler kompilieren von c++ Erwartet Mitgliedsnamen oder ';' nach der Deklaration Bezeichner
Habe ich Probleme mit der überprüfung von Methoden in einem c++ - Bibliothek (openNN) ich versuche es zu compilieren in Xcode. Verwende ich ein Beispiel von einer der Methoden, die, wie ich vermute, sind Sie alle durch das gleiche Problem verursacht.
Header-Erklärung-wo bekomme ich die Fehlermeldung:
Erwartet Mitgliedsnamen oder ';' nach der Deklaration Bezeichner.
void check(void) const;
Funktion definition:
void InverseSumSquaredError::check(void) const
{
std::ostringstream buffer;
//Neural network stuff
if(!neural_network_pointer)
{
buffer << "OpenNN Exception: InverseSumSquaredError class.\n"
<< "void check(void) const method.\n"
<< "Pointer to neural network is NULL.\n";
throw std::logic_error(buffer.str().c_str());
}
const MultilayerPerceptron* multilayer_perceptron_pointer = neural_network_pointer->get_multilayer_perceptron_pointer();
if(!multilayer_perceptron_pointer)
{
buffer << "OpenNN Exception: InverseSumSquaredError class.\n"
<< "void check(void) const method.\n"
<< "Pointer to multilayer perceptron is NULL.\n";
throw std::logic_error(buffer.str().c_str());
}
const unsigned int inputs_number = multilayer_perceptron_pointer->count_inputs_number();
const unsigned int outputs_number = multilayer_perceptron_pointer->count_outputs_number();
if(inputs_number == 0)
{
buffer << "OpenNN Exception: InverseSumSquaredError class.\n"
<< "void check(void) const method.\n"
<< "Number of inputs in multilayer perceptron object is zero.\n";
throw std::logic_error(buffer.str().c_str());
}
if(outputs_number == 0)
{
buffer << "OpenNN Exception: InverseSumSquaredError class.\n"
<< "void check(void) const method.\n"
<< "Number of outputs in multilayer perceptron object is zero.\n";
throw std::logic_error(buffer.str().c_str());
}
//Mathematical model stuff
if(!mathematical_model_pointer)
{
buffer << "OpenNN Exception: InverseSumSquaredError class.\n"
<< "void check(void) const method.\n"
<< "Pointer to mathematical model is NULL.\n";
throw std::logic_error(buffer.str().c_str());
}
//Data set stuff
if(!data_set_pointer)
{
buffer << "OpenNN Exception: InverseSumSquaredError class.\n"
<< "void check(void) const method.\n"
<< "Pointer to data set is NULL.\n";
throw std::logic_error(buffer.str().c_str());
}
//Final solutions error stuff
}
Wenn ich die definition in den header
void InverseSumSquaredError::check(void) const;
Ich am Ende mit der Fehlermeldung:
Zusätzliche Qualifikation auf den 'check'
Ich bin derzeit mit dem Dialekt von C++98 und die Bibliothek libc++.
Xcode ist gesetzt zum kompilieren von Quellen wie Objective-C++ kümmert sich um die meisten anderen Fehler.
Ich kann nicht an nichts anderes denken relevant für dieses Problem, es hatte mich ratlos für Stunden, so dass jede Art von Hilfe ist sehr willkommen.
- das ist nicht 'c', so entfernen Sie bitte die 'c' - tag
- ist das als reines C++? oder wollen Sie für die Verwendung des gemischten Modus für OSX/iOS/Cocoa-Zwecke?
- Es wird gemischt mit Objective-c auf OS X, iOS-evtl.
- Hilft es, wenn Sie ändern Sie den Namen der Funktion? Vielleicht
check
#ist irgendwo definiert. Auch können Sie zeigen ein paar Zeilen, bevor die header-Erklärung, Sie könnte fehlt ein Semikolon check
scheint es nicht zu sein, definiert an anderer Stelle. Obwohl nach der änderung es kompiliert einwandfrei. Ich denke, Xcode nicht wie der name der Methode.- scheint ein Problem zu sein für einige-siehe stackoverflow.com/questions/16766843/... und github.com/USCiLab/cereal/issues/104 -- könnten Sie versuchen, mithilfe der #define-Ansatz beschrieben, in dem zweiten link. HTH.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht wissen, Ihre genaue setup, aber es wurden historische Berichte, wenn source-code Referenzen
AssertMacros.h
und hat auch einige definition einercheck
Methode. In meinem test-code:Beobachtete ich den gleichen Fehler. Darunter die Zeile:
vor
AssertMacros.h
behebt das Problem.#undef check
vor, einschließlichopencv.hpp
kann den Fehler beheben. Dies ist nützlich, in einer gemischten Swift/obj-C-Umgebung, wo man nicht immer schieben Sie die Reihenfolge beinhaltet.