Symbool(en) niet gevonden voor architectuur x86_64 op QtCreator-project

Ik krijg de foutmelding

Symbol(s) not found for architecture x86_64

Proberen een project te compileren op QtCreator. Het gebeurt wanneer ik een instantie probeer te maken van een door de gebruiker gedefinieerde klasse, Layer. Die klasse bestaat uit een header, layer.h, en een implementatie, layer.cpp. Het is getest en werkt in andere programma’s. In mijn project is het opgenomen in qtwidget.h en de fout treedt op wanneer ik het probeer te gebruiken op qtwidget.cpp. Bijvoorbeeld:

Layer<double> text("pq.txt",0.5,0.5,0.5);

Het hebben van deze regel op qtwidget.cpp is voldoende om de fout te laten verschijnen.

Dit is zo’n algemene fout dat ik geen idee heb hoe ik het verder kan isoleren, maar als het helpt, heb ik het hele project opgenomen op deze git repo.


Antwoord 1, autoriteit 100%

Naar mijn mening is het foutbericht dat Qt Creator weergeeft behoorlijk misleidend totdat je het begrijpt, maar het verhindert niet dat de sjabloonklasse wordt opgesplitst in een koptekst en een implementatiebestand. Als je nadenkt over het bericht:

Symbol(s) not found for architecture x86_64

het probleem, dacht ik aanvankelijk toen ik dit zag, is dat het deze fout alleen vermeldt in de uitvoer Problemen en de gebruiker kan laten denken dat het probleem te wijten is aan de architectuur. Eigenlijk is het enige wat het zegt dat er een gedefinieerd symbool is (vaak een functie) waarvan de overeenkomende implementatie niet is gevonden.

Als u van Problemen naar het venster Uitvoer compileren gaat en omhoog scrolt, kunt u precies zien welke symbolen niet kunnen worden gevonden; de mijne wordt in het rood weergegeven. Het is alleen vervelend dat de details van de ontbrekende symbolen niet worden weergegeven in de weergave Problemen.

Het is gemakkelijk om deze fout te repliceren door gewoon een functiedefinitie toe te voegen aan een header en zonder de functie te implementeren, deze aan te roepen vanuit het .cpp-bestand. Je ziet dan zoiets als dit in het venster Problemen

symbool niet gevonden

Overschakelen naar de weergave Uitvoer compileren en omhoog scrollen geeft dit weer: –

voer hier de afbeeldingsbeschrijving in

Dus nu zien we dat het eigenlijke probleem is dat de functie DoSomeStuff in de klasse met de naam PGGui wordt aangeroepen door de constructor PGGui::PGGui, maar de hoofdtekst van DoSomeStuff ontbreekt, omdat het symbool niet wordt gevonden.


Antwoord 2, autoriteit 15%

Gelukkig ben ik erin geslaagd mijn probleem op te lossen voordat er antwoorden waren, dus als iemand iets soortgelijks ervaart, was het probleem dat het lijkt alsof je een sjabloonklasse niet kunt splitsen in een .cpp en een .h bestand. Door alle declaraties van het .cpp-bestand terug in de .h te plaatsen, was het probleem opgelost.

Ik had echter nog steeds een overgebleven probleem: dubbele symbolen (wat de reden was dat ik het opsplitste). Deze keer, een variabele declareren als external in de .h, en deze opnieuw declareren zonder het external trefwoord in één (en slechts één) .cpp-bestand loste het probleem voorgoed op.


Antwoord 3, autoriteit 4%

Voor mij was dit probleem het gevolg van het niet opnieuw opbouwen van het make-bestand na het toevoegen van een ander bronbestand en header.

In aanbouw:
Cleanall->run qMake->run

de fout voor mij verholpen.


Antwoord 4

Het probleem in mijn geval was dat ik een project had met veel subprojecten en een van de profielen van de subprojecten was leeg.


Antwoord 5

Voor mij was ik vergeten de naam van het klasseobject te schrijven bij het declareren van de functie in het .cpp-bestand.

fout: int Zero(int &num)

rechts: int Common2::Zero(int &num)

Waar Common2 de klas is.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes