main namespace
Warum nicht diese zu kompilieren?
Der linker kann nicht gefunden, aber warum ist das der Fall?
namespace somenamespace{
int main(void){
return 0;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht diese zu kompilieren?
Der linker kann nicht gefunden, aber warum ist das der Fall?
namespace somenamespace{
int main(void){
return 0;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein Beispiel hat 'main' (gedacht als das Programm entry point) als namespace-Funktion und damit dein code ist schlecht ausgebildet. Dies bedeutet nicht, dass eine Funktion 'main' kann nicht definiert werden, wie Sie es Tat. Es bedeutet nur, dass eine Globale namespace-scope definition von 'main' in übereinstimmung mit der Standard definiert Unterschrift erforderlich ist, für eine
frei stehend-Programm.hosted ProgrammDer linker sucht
::main
, nicht::somenamespace::main
. Diemain
dass heißt bei Programm-Start müssen in den globalen Namensraum.@Chubsdad hat wies Sie auf die entsprechende Sprache in der Norm, dass Staaten, die diese. Aber der standard ist geschrieben in einem bizarren 'standardese' trägt sehr viel ähnlichkeit mit legalese. Ich fühlte mich ein Klartext-Erklärung, was Los war, könnte besser sein.
Hinweis: Es gibt einen Grund, der standard wird so geschrieben. In den standard, den Sie wollen, dass jeder Begriff, den Sie verwenden, um eine sehr präzise und gut definierte Bedeutung, und Sie wollen nicht, dass die Bedeutung variiert je nach Kontext, weil es macht den standard sehr viel schwieriger zu interpretieren. Das ist eigentlich sehr ähnlich zu der Grund, dass legalese sieht, wie es funktioniert.
main
(3.6.1/1)" eine unangemessene Reaktion? Ein Satz, 9 einfache Worte. Doch Sie sind immer noch mit "standardese".Den linker erforderlich ist, zu veranlassen, die Ausführung des Programms zu beginnen, in eine Globale Funktion namens "main". Der ganze Punkt von benig in der Lage, eigene namespaces erstellen - wie Sie das getan haben - ist zu vermeiden, dass Dinge, die in den globalen Namensraum, so dass Sie nicht versehentlich abgeholt durch anderen code oder der linker. Sie sind ausdrücklich zu sagen "ich bin dem Aufruf dieser Funktion wichtigste, aber auch das ist nur sinnvoll im Kontext von
somenamespace
- wenn Sie nicht wissen, über somenamespace Sie nicht finden oder in der Lage sein, es zu benutzen".Umsetzung Weise, die entstellten Namen Ihres wichtigsten symbols wurde geändert von den erwarteten Namen aufgrund der Namensraum, so dass der linker nur nicht die symbol-Tabelle der Eintrag, den er braucht.