<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Link Error LNK2019]]></title><description><![CDATA[<p>Hi</p>
<p>Habe folgendes Problem.</p>
<p>Ich habe ein grösseres C-Projekt, bei dem ich ehrlich gesagt nicht den vollen Durchblick habe.<br />
Nun willin einer der SOURCE-dateien einige Funktionen benutzen, die ich in einem seperaten c++-File (dld.cpp) definiert habe. Des weiteren hab ich ein header-file (dld.h) geschrieben, in welchem die Funktionen deklariert sind. Diese h-File binde ich nun mittels #include in einem weiteren source-File ein, in dem ich die Funktionen aus dld.cpp gerne benutzen würde. Ist mein Vorgehen prinzipiell richtig?<br />
ungefähr so:</p>
<p>dld.h:</p>
<pre><code class="language-cpp">#ifndef DLD_H
#define DLD_H

int geth(double x, double t,  double *h);
int get_Qv_ind(double x, double r, double t,  double T, double *Qv_ind);
int get_dld_Mat();

#endif
</code></pre>
<p>dld.cpp:</p>
<pre><code class="language-cpp">#include &quot;../so/dld.h&quot;
#include &quot;../hd/ge_types.h&quot;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
#include &lt;cmath&gt;

using namespace std;

const double pi = 3.14159265;	// Pi

//Private Variables

vector&lt; vector&lt;double&gt; &gt; dld_Mat;	// Matrix with Temperature and corresponding material properties

fstream infile;
string s;

double dld_Mu0 = 4*pi*1.e-7;	// magnetic constant [H/m]

//noch mehr variablen werden initialisiert und definiert

int geth(double x, double t, double *h)
{
    //blabla	
}

int get_dld_Mat()
{
    //blabla
}

int get_Qv_ind(double x, double r, double t, double T, double *Qv_ind)
{
   //blabla	
}
</code></pre>
<p>und schliesslich so_temp.c (C-File)</p>
<pre><code class="language-cpp">//mehrere include's
#include &quot;dld.h&quot;

int irgendeine funktion()
{
   //blabla
   geth(..);
   get_dld_Mat();
   get_Qv_ind(...);
}
</code></pre>
<p>Kompilieren funktioniert. Nur beim Linken krieg ich dann die folgenden Fehlermeldungen:</p>
<p>so_temp.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;_get_Qv_ind&quot; in Funktion &quot;_tl_so_ThermoSolve&quot;.<br />
so_temp.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;_get_dld_Mat&quot; in Funktion &quot;_tl_so_ThermoSolve&quot;.<br />
so_temp.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;_geth&quot; in Funktion &quot;_tl_so_HeatSurfaceFluid&quot;.</p>
<p>Ich arbeite mit MS VS2005</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230251/link-error-lnk2019</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 11:22:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230251.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Dec 2008 21:20:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Link Error LNK2019 on Mon, 22 Dec 2008 22:36:40 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Habe folgendes Problem.</p>
<p>Ich habe ein grösseres C-Projekt, bei dem ich ehrlich gesagt nicht den vollen Durchblick habe.<br />
Nun willin einer der SOURCE-dateien einige Funktionen benutzen, die ich in einem seperaten c++-File (dld.cpp) definiert habe. Des weiteren hab ich ein header-file (dld.h) geschrieben, in welchem die Funktionen deklariert sind. Diese h-File binde ich nun mittels #include in einem weiteren source-File ein, in dem ich die Funktionen aus dld.cpp gerne benutzen würde. Ist mein Vorgehen prinzipiell richtig?<br />
ungefähr so:</p>
<p>dld.h:</p>
<pre><code class="language-cpp">#ifndef DLD_H
#define DLD_H

int geth(double x, double t,  double *h);
int get_Qv_ind(double x, double r, double t,  double T, double *Qv_ind);
int get_dld_Mat();

#endif
</code></pre>
<p>dld.cpp:</p>
<pre><code class="language-cpp">#include &quot;../so/dld.h&quot;
#include &quot;../hd/ge_types.h&quot;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
#include &lt;cmath&gt;

using namespace std;

const double pi = 3.14159265;	// Pi

//Private Variables

vector&lt; vector&lt;double&gt; &gt; dld_Mat;	// Matrix with Temperature and corresponding material properties

fstream infile;
string s;

double dld_Mu0 = 4*pi*1.e-7;	// magnetic constant [H/m]

//noch mehr variablen werden initialisiert und definiert

int geth(double x, double t, double *h)
{
    //blabla	
}

int get_dld_Mat()
{
    //blabla
}

int get_Qv_ind(double x, double r, double t, double T, double *Qv_ind)
{
   //blabla	
}
</code></pre>
<p>und schliesslich so_temp.c (C-File)</p>
<pre><code class="language-cpp">//mehrere include's
#include &quot;dld.h&quot;

int irgendeine funktion()
{
   //blabla
   geth(..);
   get_dld_Mat();
   get_Qv_ind(...);
}
</code></pre>
<p>Kompilieren funktioniert. Nur beim Linken krieg ich dann die folgenden Fehlermeldungen:</p>
<p>so_temp.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;_get_Qv_ind&quot; in Funktion &quot;_tl_so_ThermoSolve&quot;.<br />
so_temp.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;_get_dld_Mat&quot; in Funktion &quot;_tl_so_ThermoSolve&quot;.<br />
so_temp.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;_geth&quot; in Funktion &quot;_tl_so_HeatSurfaceFluid&quot;.</p>
<p>Ich arbeite mit MS VS2005</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634348</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Mon, 22 Dec 2008 22:36:40 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 09:28:37 GMT]]></title><description><![CDATA[<p>Das sieht soweit eigentlch gut aus. Stimmen denn die Pfade sicher?</p>
<p>Wo ist denn tl_so_ThermoSolve und tl_so_HeatSurfaceFluid?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634469</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 23 Dec 2008 09:28:37 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 09:32:02 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>tl_so_ThermoSolve und tl_so_HeatSurface_Fluid sind Funktionen im C-File so_temp.c, in denen wiederum meine Funktionen aufgerufen werden sollen.</p>
<p>Die Pfade sollten soweit stimmen. Der Compiler erkennt ja auch, dass die Funktionen deklariert, und meckert, wenn ich nicht passende Funktionsargumente eingebe. Nur beim Linken gibt er mir halt die Fehlermeldung raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634473</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Tue, 23 Dec 2008 09:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 09:40:31 GMT]]></title><description><![CDATA[<p>Also die Funktionsargumente müssen hier genau stimmen, ansonsten kann es gar nicht funktionieren. Du muss für jede Funktion die richtige Anzahl an doubles übergeben.</p>
<p>Dann könnte es noch sein, dass du die Dateien nicht zum Projekt hinzugefügt hast? Dann werden die nämlich nicht mitgelinkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634480</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 23 Dec 2008 09:40:31 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 09:51:49 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ja, wenn die Funktionsargumente nicht passen funktioniert ja schon das kompillieren nicht. Das geht aber (richtige argumente). Nur beim Linken kommt der Fehler. Die Dateien sollten auch dem Projekt zugefügt sein. Sie sind jedenfalls im Projekt-Explorer von VS2005 unter source-files, bzw. header-files aufgeführt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634487</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Tue, 23 Dec 2008 09:51:49 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 09:59:22 GMT]]></title><description><![CDATA[<p>Du kannst nicht einfach C und C++ mischen. Wenn Du ein mit C++ compiliertes Modul in einem C-File verwenden können möchtest, muss der Header wie folgt aussehen:</p>
<pre><code class="language-cpp">#ifndef DLD_H
#define DLD_H

#ifdef __cplusplus
extern &quot;C&quot; {
#endif

int geth(double x, double t,  double *h);
int get_Qv_ind(double x, double r, double t,  double T, double *Qv_ind);
int get_dld_Mat();

#ifdef __cplusplus
} // extern &quot;C&quot;
#endif

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1634495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634495</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 23 Dec 2008 09:59:22 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 10:10:33 GMT]]></title><description><![CDATA[<p>Das nützt aber nix, Die Fehlermeldungen kommen weiterhin. By the way, ist dass die übliche Vorgehensweise, um C++-Funktionen in C-Code verwenden zu können?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634505</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Tue, 23 Dec 2008 10:10:33 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 10:15:37 GMT]]></title><description><![CDATA[<p>Ja, ist es.</p>
<p>Habe eins allerdings verkehrt betrachtet: Wenn die Funktionen in C geschrieben sind und in C++ benutzt werden sollen, muss der Header wie beschrieben aussehen (schaden kann es hier aber nicht). Da die Situation hier umgekehrt ist, also C++-Code in C benutzt werden soll, müssen die Definitionen der Funktionen natürlich genauso markiert werden. Da ist dafür kein #ifdef nötig, da ja immer als C++ übersetzt wird.</p>
<pre><code class="language-cpp">include &quot;../so/dld.h&quot;
#include &quot;../hd/ge_types.h&quot;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
#include &lt;cmath&gt;

using namespace std;

const double pi = 3.14159265;    // Pi

//Private Variables

vector&lt; vector&lt;double&gt; &gt; dld_Mat;    // Matrix with Temperature and corresponding material properties

fstream infile;
string s;

double dld_Mu0 = 4*pi*1.e-7;    // magnetic constant [H/m]

//noch mehr variablen werden initialisiert und definiert

// ---------------- Funktionsdefinitionen ---------------------
extern &quot;C&quot; {
// ----------------------------------------------------

int geth(double x, double t, double *h)
{
    //blabla   
}

int get_dld_Mat()
{
    //blabla
}

int get_Qv_ind(double x, double r, double t, double T, double *Qv_ind)
{
   //blabla   
} 

// ende von extern &quot;C&quot;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1634511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634511</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 23 Dec 2008 10:15:37 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 10:25:34 GMT]]></title><description><![CDATA[<p>Ich könnte grad verzweifeln.</p>
<p>Also, wenn ich das extern &quot;C&quot; nur in der cpp-verwende, bekomme ich folgende Fehlermeldung:</p>
<p>c:\dld\pf_2d_mod\so\dld.cpp(114) : error C2732: Bindungsangaben widersprechen vorheriger Angabe für 'geth'<br />
c:\dld\pf_2d_mod\so\dld.cpp(113): Siehe Deklaration von 'geth'<br />
c:\dld\pf_2d_mod\so\dld.cpp(153) : error C2732: Bindungsangaben widersprechen vorheriger Angabe für 'get_dld_Mat'<br />
c:\dld\pf_2d_mod\so\dld.cpp(152): Siehe Deklaration von 'get_dld_Mat'<br />
c:\dld\pf_2d_mod\so\dld.cpp(239) : error C2732: Bindungsangaben widersprechen vorheriger Angabe für 'get_Qv_ind'<br />
c:\dld\pf_2d_mod\so\dld.cpp(238): Siehe Deklaration von 'get_Qv_ind'</p>
<p>Wenn ich es zusätzlich in der Header Datei verwende (ohne #ifdef):</p>
<p>c:\dld\pf_2d_mod\so\dld.h(5) : error C2059: Syntaxfehler: 'Zeichenfolge'</p>
<p>Wenn ich es zusätzlich in der Header Datei verwende (mit #ifdef):</p>
<p>Über 100 Fehlermeldungen. Einige Beispile:</p>
<p>c:\programme\microsoft visual studio 8\vc\include\new(53) : error C2732: Bindungsangaben widersprechen vorheriger Angabe für 'operator delete'<br />
c:\programme\microsoft visual studio 8\vc\include\new(53): Siehe Deklaration von 'operator delete'</p>
<p>c:\programme\microsoft visual studio 8\vc\include\iosfwd(39) : error C2894: Vorlagen können nicht mit 'C'-Bindung deklariert werden</p>
<p>c:\programme\microsoft visual studio 8\vc\include\iosfwd(601) : error C2733: Zweite C-Bindung für überladene Funktion 'std::_Traits_helper::copy_s' nicht zulässig<br />
c:\programme\microsoft visual studio 8\vc\include\iosfwd(597): Siehe Deklaration von 'std::_Traits_helper::copy_s'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634517</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Tue, 23 Dec 2008 10:25:34 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 10:35:09 GMT]]></title><description><![CDATA[<ol>
<li>Mach nur einen Thread zum gleichen Thema im Forum auf</li>
<li>Versuche nicht C und C++ in einem Header zu mixen und dann von c- und c++ dateien darauf zuzugreifen. (Die c-Datei wird Panik schieben)</li>
<li>Versuche nicht extern &quot;C&quot; class xxxx {};</li>
<li>Versuche nicht extern &quot;C&quot; template...</li>
<li>Versuche nicht extern &quot;C&quot; vector&lt;...&gt;</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/1634524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634524</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 23 Dec 2008 10:35:09 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 10:42:15 GMT]]></title><description><![CDATA[<p>Punkt 1: Verstanden werde ich. Bin nur etwas verzweifelt sorry <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Punkt 3-5: Habe keine solchen Deklarationen.</p>
<p>Punkt 2: Ich dachte wenn ich die Funktionsdeklaration in eine Headerdatei schreibe, muss ich dies header-datei dann auch im souce-file mit den zugehörigen Funktionsdefinitionen &quot;includieren&quot;. Scheint nicht der Fall zu sei. wenn ich das #include &quot;../so/dld.h&quot; aus der dld.cpp Datei entferne, funktioniert es.</p>
<p>Vielen Dank, wüsste nicht was ich ohne eure Hilfe machen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634527</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Tue, 23 Dec 2008 10:42:15 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 10:55:34 GMT]]></title><description><![CDATA[<p>Habe deinen Source Code mal in ein Projekt gepackt, Returnwerte in<br />
die Funktionen geschrieben und kompiliert.<br />
In meiner main Funktion habe ich deine Funktionen auch aufgerufen.<br />
Klappt.</p>
<p>Muß also an deinen Projektsettings bzw. an deinen Include Pfaden liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634531</guid><dc:creator><![CDATA[schokomann]]></dc:creator><pubDate>Tue, 23 Dec 2008 10:55:34 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 10:56:17 GMT]]></title><description><![CDATA[<p>Um es nochmal zusammenzufassen:</p>
<p>Wenn Du in einem C-File einen Header einbindest, der zu einer C-Bibliothek gehört, musst Du nichts unternehmen. extern &quot;C&quot; kennt der C-Compiler nicht.</p>
<p>Wenn Du in einem C++-File einen Header einbindest, der zu einer C-Bibliothek gehört, müssen die Deklarationen mit extern &quot;C&quot; { ... } umschlossen werden. Damit sowohl ein C- als auch ein C++-Compiler denselben Header verstehen können, kannst Du die Einleitung sowie die schließende Klammer jeweils durch #ifdef abgrenzen. Klar sollte sein, dass nur Deklarationen, die C überhaupt versteht, so exportiert werden können. D.h. keine Klassen, keine Templates, keine Operatoren, keine Überladung.</p>
<p>Wenn Du ein C-File übersetzt, welches Du in einem C++-File benutzen möchtest, musst Du nichts unternehmen, wenn der Header bereits stimmt.</p>
<p>Wenn Du ein C++-File übersetzt, welches Du in einem C-File benutzen möchtest, müssen alle Definitionen der Funktionen, welche im Header bereits extern &quot;C&quot; markiert sind, nochmal durch dieses umschlossen werden.</p>
<p>Für Dich treffen die Punkte zwei und vier zu, weitere Fehler können nur der Klammerung zu verdanken sein. (Achte darauf, dass die schließende Klammer von extern &quot;C&quot; <strong>vor</strong> irgendwelchen C++-Definitionen kommt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634532</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 23 Dec 2008 10:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 10:59:55 GMT]]></title><description><![CDATA[<p>so hab ichs jetzt auch gmeacht. nur mache ich jetzt in dld.cpp kein #include &quot;dld.h&quot;. dann gehts. sonst krieg ich fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634533</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Tue, 23 Dec 2008 10:59:55 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 11:13:43 GMT]]></title><description><![CDATA[<p>ich habe in der CPP Datei ein #include &quot;dld.h&quot; drin</p>
<p>Linkerfehler sind immer dann, wenn der Kompilier die Deklaration findet, aber die Implementierung nicht.<br />
Außderdem hast du normale Funktionen, die du in C als auch in C++ Klassen verwenden kannst auch ohne extern &quot;C&quot; und das ganze Geraffel.<br />
Der C++ Kompiler ist doch viel besser, weil er den Funktionsnamen und die Parameter beachtet. Durch extern &quot;C&quot; verklickerst du dem Kompiler nur, dass<br />
er den Funktionsnamen beachten soll. Das ist doch an dieser Stelle völliger<br />
Quatsch.</p>
<p>Die gleichen Funktionen kannst du auch in eine Klasse stopfen, dann schon ehr nach C++ aus, obwohl dann noch eine Menge fehlt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634541</guid><dc:creator><![CDATA[schokomann]]></dc:creator><pubDate>Tue, 23 Dec 2008 11:13:43 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 11:27:03 GMT]]></title><description><![CDATA[<p>Diese extern &quot;C&quot; Sache kann ich im headerweglassen weglassen. Im cpp brauche ich das aber. Sobald ich jedoch #include &quot;dld.h&quot; in dld.cpp schreibe, bekomme ich die Linker-Fehler. Wenn ich es weglasse, scheint alles zu funktionieren. Anscheinend findet der Linker die Definition der Funktionen in dld.cpp, auch wenn da dld.h nicht &quot;includiert&quot; ist.</p>
<p>Naja,Hauptsache es läuft irgendwie.<br />
Nochmal Dank an alle, dies sich zu diesem Thema geäussert haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634543</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Tue, 23 Dec 2008 11:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 11:24:11 GMT]]></title><description><![CDATA[<p>schokomann schrieb:</p>
<blockquote>
<p>Der C++ Kompiler ist doch viel besser, weil er den Funktionsnamen und die Parameter beachtet.</p>
</blockquote>
<p>Eben. Und wenn der C-Compiler diese Funktion dann importieren soll, findet er sie nicht, weil er eben das nicht tut.</p>
<p>pitaz schrieb:</p>
<blockquote>
<p>Diese extern &quot;C&quot; Sache kann ich weglassen.</p>
</blockquote>
<p>An welcher Stelle?</p>
<p>Magst Du noch mal das komplette Projekt in seiner jetzigen (funktionierenden) Form posten?</p>
<p>EDIT2:<br />
Achja, Du übersetzt schon das, was die Endung .cpp hat, mit einem C++-Compiler, und das, was die Endung .c hat, mit einem C-Compiler, ja?</p>
<p>EDIT:<br />
Beispielhaft sollte das so aussehen:</p>
<pre><code class="language-cpp">// funktionen.h
#ifdef __cplusplus
extern &quot;C&quot; {
#endif

void funktion(int param);

#ifdef __cplusplus
}
#endif

// funktionen.cpp
#include &quot;funktionen.h&quot;

extern &quot;C&quot; {
    void funktion(int param)
    {
    }
}

// programm.c
#include &quot;funktionen.h&quot;

int main()
{
    funktion(12);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1634545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634545</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 23 Dec 2008 11:24:11 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 11:30:57 GMT]]></title><description><![CDATA[<p>Er nimmt VS 2005 und seine Funktion hat nichts C specifisches was der C++ von VS 2005 nicht könnte. Also braucht er dieses extern &quot;C&quot; nicht.</p>
<p>Nur wenn man diese uralten C Funktionen deren schreibweise auch nicht anders<br />
ist einbindet und einen C++ Kompiler verwendet, dann muss man das manchmal machen.<br />
Sonst geht das auch ohne und das hat nichts mit den hier beschriebenen Linker Fehlern und den gezeigten Funktionen zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634553</guid><dc:creator><![CDATA[schokomann]]></dc:creator><pubDate>Tue, 23 Dec 2008 11:30:57 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 11:42:42 GMT]]></title><description><![CDATA[<p>Also, das &quot;gesamte&quot; (jedenfalls Teile der 3 Files) nochmal:</p>
<p>dld.h:</p>
<pre><code class="language-cpp">#ifndef DLD_H
#define DLD_H

//#ifdef  __cplusplus
//extern &quot;C&quot; {
//#endif 

int geth(double x, double t,  double *h);
int get_Qv_ind(double x, double r, double t,  double T, double *Qv_ind);
int get_dld_Mat();

//#ifdef __cpluspus
//}
//#endif

#endif
</code></pre>
<p>dld.cpp</p>
<pre><code class="language-cpp">//#include &quot;../so/dld.h&quot;
#include &quot;../hd/ge_types.h&quot;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
#include &lt;cmath&gt;

using namespace std;

const double pi = 3.14159265;	// Pi

//Private Variables

vector&lt; vector&lt;double&gt; &gt; dld_Mat;	// Matrix with Temperature and corresponding material properties
									// Mat[T][i] = ith property at Tm
									// i=0: Temperature  (=T)  [C]
									// i=1: thermal conductivity [W/(m*K)]
									// i=2: heat capacity [J/(kg*K)]
									// i=3: density [kg/m3]
									// i=4 resistivity [Ohm/m]
fstream infile;
string s;

double dld_Mu0 = 4*pi*1.e-7;	// magnetic constant [H/m]

//Parameters of Heating/Cooling-Device

double dld_hc_x0 = 0.2;			//absolute start coordinate of left end of Heating/Cooling-Device [m]
double dld_hc_v = 0.005;			//velocity of cooling device [m/s]

//Noch mehr solche Variablen werden initialisiert und definiert.

//Wird in den anderen 3 Funktionen benötigt
double evalfx(double x_coil, double l_coil, double r_coil, double x)
{
	return 1/(2*l_coil) * ((x_coil+l_coil-x)/sqrt(pow(x_coil+l_coil-x,2) + pow(r_coil,2)) - (x_coil-x)/sqrt(pow(x_coil-x,2)+pow(r_coil,2)));
}

//Wird in den anderen 3 Funktionen benötigt
double evalh(double a1, double a2, double xc, double b, double x)
{
	return (a2-a1)/pi*atan(b*(x-xc))+(a2-a1)/2+a1;
}

extern &quot;C&quot;{

int geth(double x, double t, double *h)
{
   //Funktiondefinition	
}

int get_dld_Mat()
{
   //Funktionsdefinition
}

int get_Qv_ind(double x, double r, double t, double T, double *Qv_ind)
{
   //Funktionsdefinition	
}
}
</code></pre>
<p>so_temp.c:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

#include  &quot;../hd/ge_types.h&quot;

#include  &quot;../hd/pa_parallel.h&quot;

#include  &quot;../hd/so_routines.h&quot;

#include  &quot;../hd/me_interface.h&quot;
#include  &quot;../hd/el_variables.h&quot;
#include  &quot;../hd/me_variables.h&quot;
#include  &quot;../hd/ma_variables.h&quot;
#include  &quot;../hd/nl_variables.h&quot;
#include  &quot;../hd/co_variables.h&quot;
#include  &quot;../so/dld.h&quot;

static int so_nTrias, so_nQuads, so_nElems, so_nNQuads, so_nCQuads, so_nNodes;

//Auch hier werden zusätzlich noch einige Variablen deklariert

static int tl_so_ThermoSolve
(
    VOID
);

static int tl_so_HeatSurfaceFluid

    int   nNodes,       

    double pNodalArea[],   
    int   Mat[],         
    double Temp[],
    double time,                                                                                
    double Q[]                       

);

//Deklaration weitere Funktionen (in C)

//Definition der Funktionen

//geth, get_dld_Mat und get_Qv_ind werden nun in den Funktionen tl_so_ThermoSolve und tl_so_HeatSurfaceFluid aufgerufen
</code></pre>
<p>Wenn ich das extern &quot;C&quot; in dld.cpp weglasse, kriege ich wieder die Linker-Fehler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634559</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Tue, 23 Dec 2008 11:42:42 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 12:11:30 GMT]]></title><description><![CDATA[<p>schokomann schrieb:</p>
<blockquote>
<p>Er nimmt VS 2005 und seine Funktion hat nichts C specifisches was der C++ von VS 2005 nicht könnte. Also braucht er dieses extern &quot;C&quot; nicht.</p>
</blockquote>
<p>Das stimmt nicht, weil eben, wie Du bereits zutreffend festgestellt hast, der C++-Compiler die Funktionssignaturen beachtet, und ein C-Compiler nicht. Ein C++-Compiler erzeugt also Funktionen unter Beachtung der Signatur, aber der C-Compiler, der diese Objekte benutzen soll, sucht die Funktionen ohne die Signatur zu beachten. Extern &quot;C&quot; braucht man auch nicht manchmal wenn der Compiler Lust drauf hat, sondern zu fest definierten Zwecken, von denen der hier (nicht nur manchmal) einer ist.</p>
<p>Beispiel:<br />
Ein C++-Compiler übersetzt die Funktion &quot;void function(int param)&quot; und nennt sie, weil er die Signatur beachtet, im Objekt &quot;function_i4&quot;. Ein C-Compiler übersetzt ein Programm, welches die Funktion deklariert, und sucht sie, weil er die Signatur nicht beachtet, unter dem Namen &quot;function&quot;. Der Linker fügt nun beide Objekte zusammen und stellt fest, dass es &quot;function&quot; nicht gibt.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20924">@pitaz</a>:</p>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>Für Dich treffen die Punkte zwei und vier zu, weitere Fehler können nur der Klammerung zu verdanken sein.</p>
</blockquote>
<p>Wie ich bereits vermutet hatte, in der H-Datei fehlt die schließende Klammer von extern &quot;C&quot;, weil Du __cplus<strong>pus</strong> abfragst, statt __cplusplus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634586</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 23 Dec 2008 12:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 12:19:11 GMT]]></title><description><![CDATA[<p>Oje, das geht auf meine Kappe, den exakten Typo habe ich leider drüben im MFC-Forum gemacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634594</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 23 Dec 2008 12:19:11 GMT</pubDate></item><item><title><![CDATA[Reply to Link Error LNK2019 on Tue, 23 Dec 2008 12:28:16 GMT]]></title><description><![CDATA[<p>sollte ich denn auch ein #include &quot;dld.h&quot; in dld.cpp haben? Funktioniert jedenfalls ohne.</p>
<p>Danke für den Hinweis, jetzt funktionierts auch wenn ich #include &quot;dld.h&quot; drinlasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634600</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Tue, 23 Dec 2008 12:28:16 GMT</pubDate></item></channel></rss>