<?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[WinApi Funktionen als Methodennamen?]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich habe eine Klasse:</p>
<pre><code class="language-cpp">class MyClass {
void SetComputerName(string sCompname) {
}
}
</code></pre>
<p>Die Fehlermeldung:</p>
<blockquote>
<p>Und beim kompilieren erhalte ich diese Meldung:<br />
Linking...<br />
MainClass.obj : error LNK2001: unresolved external symbol &quot;public:<br />
void __thiscall MyClass::SetComputerNameA(<br />
class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; const &amp;)&quot;<br />
(?SetComputerNameA@MyClass@@QAEXABV?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>i</mi><mi>c</mi><mi mathvariant="normal">_</mi><mi>s</mi><mi>t</mi><mi>r</mi><mi>i</mi><mi>n</mi><mi>g</mi><mi mathvariant="normal">@</mi><mi>D</mi><mi>U</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">basic\_string@DU?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:1.00444em;vertical-align:-0.31em;"></span><span class="base textstyle uncramped"><span class="mord mathit">b</span><span class="mord mathit">a</span><span class="mord mathit">s</span><span class="mord mathit">i</span><span class="mord mathit">c</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathit">s</span><span class="mord mathit">t</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.02778em;">D</span><span class="mord mathit" style="margin-right:0.10903em;">U</span><span class="mclose">?</span></span></span></span>char_traits@D@std@@V?$allocator@D@2@@std@@@Z)<br />
Debug/MainClass.exe : fatal error LNK1120: 1 unresolved externals</p>
</blockquote>
<p>Wenn ich SetComputerName() in SetCompName() umbennen kann ich wieder kompilieren. Darf ich als Methodennamen keine WinApi Funktionen nehmen? MFC habe ich genauso wie Precompiled Header ausgeschaltet.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190327/winapi-funktionen-als-methodennamen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 12:21:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190327.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Aug 2007 15:33:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Tue, 21 Aug 2007 15:33:36 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich habe eine Klasse:</p>
<pre><code class="language-cpp">class MyClass {
void SetComputerName(string sCompname) {
}
}
</code></pre>
<p>Die Fehlermeldung:</p>
<blockquote>
<p>Und beim kompilieren erhalte ich diese Meldung:<br />
Linking...<br />
MainClass.obj : error LNK2001: unresolved external symbol &quot;public:<br />
void __thiscall MyClass::SetComputerNameA(<br />
class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; const &amp;)&quot;<br />
(?SetComputerNameA@MyClass@@QAEXABV?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>i</mi><mi>c</mi><mi mathvariant="normal">_</mi><mi>s</mi><mi>t</mi><mi>r</mi><mi>i</mi><mi>n</mi><mi>g</mi><mi mathvariant="normal">@</mi><mi>D</mi><mi>U</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">basic\_string@DU?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:1.00444em;vertical-align:-0.31em;"></span><span class="base textstyle uncramped"><span class="mord mathit">b</span><span class="mord mathit">a</span><span class="mord mathit">s</span><span class="mord mathit">i</span><span class="mord mathit">c</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathit">s</span><span class="mord mathit">t</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.02778em;">D</span><span class="mord mathit" style="margin-right:0.10903em;">U</span><span class="mclose">?</span></span></span></span>char_traits@D@std@@V?$allocator@D@2@@std@@@Z)<br />
Debug/MainClass.exe : fatal error LNK1120: 1 unresolved externals</p>
</blockquote>
<p>Wenn ich SetComputerName() in SetCompName() umbennen kann ich wieder kompilieren. Darf ich als Methodennamen keine WinApi Funktionen nehmen? MFC habe ich genauso wie Precompiled Header ausgeschaltet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349165</guid><dc:creator><![CDATA[martin_salo]]></dc:creator><pubDate>Tue, 21 Aug 2007 15:33:36 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Tue, 21 Aug 2007 15:40:06 GMT]]></title><description><![CDATA[<p>packs einfach in nem eigenen namespace</p>
<pre><code class="language-cpp">namespace ABC {
class MyClass {
void SetComputerName(string sCompname) {
}
}
} // namespace

spaeter dann nur
ABS::MyClass class();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1349169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349169</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Tue, 21 Aug 2007 15:40:06 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Tue, 21 Aug 2007 16:02:54 GMT]]></title><description><![CDATA[<p>Mit Namespaces habe ich mich auch noch nicht beschäftigt. Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349191</guid><dc:creator><![CDATA[martin_salo]]></dc:creator><pubDate>Tue, 21 Aug 2007 16:02:54 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Tue, 21 Aug 2007 16:20:46 GMT]]></title><description><![CDATA[<p>die standardfunktionen von c++ sind in den namespace STD definiert, daher kommt man mit diesen nie in die quere,</p>
<p>ausser man ist so bloed und macht using namespace std;</p>
<p>die winapi funktionen sind leider in keinen namespace da es das fuer c noch nicht gab, daher sind die global immer bekannt, durch deine deklaration &quot;dachte&quot; der compiler das du die funktion ueberladen willst, darum sollte A und W auch noch ueberschrieben werden {in diesem fall A}</p>
<p>in einem eigenen namespace hast du keine probleme mit konflikten, egal welchen namen {ausser main glaub ich}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349197</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Tue, 21 Aug 2007 16:20:46 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Wed, 22 Aug 2007 14:39:06 GMT]]></title><description><![CDATA[<p>Eine Nachfrage: Wenn ich einen eigenen Namespace aufmachen, wie komme ich dann da wieder raus? Wenn ich doch mal eine WinApi Funktion benutzen will, was schreibe ich dann da?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349850</guid><dc:creator><![CDATA[martin_salo]]></dc:creator><pubDate>Wed, 22 Aug 2007 14:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 05:56:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">namespace ABC {
class MyClass {
void SetComputerName(string sCompname) {
}
}
} // namespace

spaeter dann nur
ABS::MyClass class();
</code></pre>
<p>das ist deine klasse in deinem namespace, wenn du daraus eine funktion benutzen willst musst du den namespace stets mit angeben - also</p>
<p>ABS::MyClass class();<br />
sobald du die klasse instanziiert hast, benutzt du dort die funktion<br />
class.SetComputerName();<br />
wenn du keine klasse sondern eine globale funktion in dem namespace hast benutz du diese so<br />
ABS::SetComputerName();</p>
<p>Wenn du den bloedsinn des using namespace verfallen bist kannst du mit<br />
::SetComputerName()<br />
die WinAPI funktion aufrufen</p>
<p>ps. einen &quot;Namespace aufmachen&quot; macht so kein sinn, du teilst durch den namespace deine funktionsnamen vom restlichen code, du steigst da nicht rein oder raus, sondern rufst entweder eine globale funktion oder eine funktion aus einem namespace auf</p>
<p>wenn du zb cout willst, musst du std::cout machen da cout im namensbereich std definiert ist<br />
(using namespace ist eh ganz boese, lass es bleiben)</p>
<p>ps. das ist eher ein topic fuer c++ als mfc</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350156</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Thu, 23 Aug 2007 05:56:15 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 06:23:11 GMT]]></title><description><![CDATA[<p>An sich sollte das kein Problem sein. Wenn in alle Header Dateien auch windows.h included wird.</p>
<p>Aus SetComputerName wird durch einen define in der windows.h entweder SetComputerNameA oder SetComputerNameW. Das ist aber keine TRagik, wenn diese Umwandlung in allen Sourcemodulen passiert.</p>
<p>Das ganze wäre nur ein Problem, wenn die Library die DU verwendest oder eine der Sourcedateien nicht windows.h included!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350175</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 23 Aug 2007 06:23:11 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 09:24:34 GMT]]></title><description><![CDATA[<p>Naja, der Getter ändert sich vom Namen her. Dann stimmt auch meine Doku nicht mehr...</p>
<p>Ich habe versucht das Bsp von Mr. Evil umzusetzen.</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;iostream&gt;
#include &quot;windows.h&quot;
namespace ABC {
	class MyClass {
	public:
		// Diese Funktion will ich dann wieder umbenennen. (X wegmachen.)
		void GetComputerNameX(std::string sCompname) {
			unsigned long length=100;
			char *sBuffer = new char[length];
			std::GetComputerName(sBuffer, &amp;length); // Hier die WinApi Funktion
			delete sBuffer;
		}

	};
} // namespace

int main() {
	ABC::MyClass M;

	M.GetComputerNameX(&quot;&quot;);
	return 0;
}
</code></pre>
<p>Der Kompilerfehler:</p>
<blockquote>
<p>error C2871: 'ABC' : does not exist or is not a namespace</p>
</blockquote>
<p>merkt diese Zeile an:</p>
<pre><code class="language-cpp">namespace ABC {
</code></pre>
<p>Dem Beispiel von Shade nach sollte es aber so klappen:<br />
<a href="http://tutorial.schornboeck.net/namespace.htm" rel="nofollow">http://tutorial.schornboeck.net/namespace.htm</a></p>
<p>HAbe ich etwas nicht beachtet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350276</guid><dc:creator><![CDATA[martin_salo]]></dc:creator><pubDate>Thu, 23 Aug 2007 09:24:34 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 09:28:31 GMT]]></title><description><![CDATA[<p>ABC ist bereits der Name einer WinAPI-Struktur. War ein schlechtes Beispiel. Jeder andere nicht bereits benutzte Name sollte funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350277</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 23 Aug 2007 09:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 10:27:54 GMT]]></title><description><![CDATA[<p>Ach so, Danke Euch allen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350315</guid><dc:creator><![CDATA[martin_salo]]></dc:creator><pubDate>Thu, 23 Aug 2007 10:27:54 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 11:01:58 GMT]]></title><description><![CDATA[<p>martin_salo schrieb:</p>
<blockquote>
<p>Naja, der Getter ändert sich vom Namen her. Dann stimmt auch meine Doku nicht mehr...</p>
</blockquote>
<p>Nein! Das tut er eigentlich nicht. Denn das er den Namen ändert sieht keiner!<br />
Jeder der auch die windows.h verwendet sieht auch nur den alten Namen GetComputerName.</p>
<p>Ich mache mir an dieser Stelle gar keine Gedanken, denn die Änderungen passieren ja im Hintergrund.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350337</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 23 Aug 2007 11:01:58 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 11:40:40 GMT]]></title><description><![CDATA[<p>Weil sich beim Nutzer der Klassen der Name der Funktion auch ändern würde... ok.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350374</guid><dc:creator><![CDATA[martin_salo]]></dc:creator><pubDate>Thu, 23 Aug 2007 11:40:40 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 11:44:17 GMT]]></title><description><![CDATA[<p>martin_salo schrieb:</p>
<blockquote>
<p>Weil sich beim Nutzer der Klassen der Name der Funktion auch ändern würde... ok.</p>
</blockquote>
<p>Genau!<br />
Einzig und alleine in dem &quot;seltenen&quot; Fall das windows.h nicht zum Projekt gehört, würde es ein Problem geben. Aber selbst dass kann man mit einem entsprechenden #ifdef prüfen und zur Pflicht machen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350380</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 23 Aug 2007 11:44:17 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 12:03:26 GMT]]></title><description><![CDATA[<p>Oder wenn man den Getter über eine DLL Schnittstelle exportiert und der DLL Nutzer auf der anderen Seite keine windows.h benutzt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350395</guid><dc:creator><![CDATA[martin_salo]]></dc:creator><pubDate>Thu, 23 Aug 2007 12:03:26 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 12:21:33 GMT]]></title><description><![CDATA[<p>martin_salo schrieb:</p>
<blockquote>
<p>Oder wenn man den Getter über eine DLL Schnittstelle exportiert und der DLL Nutzer auf der anderen Seite keine windows.h benutzt...</p>
</blockquote>
<p>Wie soll er das machen? Die DLL benutzen ohne Header Datei, besonders wenn es sich um eine Klasse handelt? Du kanst in der Header Datei immer den entsprechendne Schutz unterbringen.</p>
<p>Bei selbst wenn GetProcAddress verwendet wird mit extern &quot;C&quot;, kann man entsprechende Vorkerhungen treffen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350409</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 23 Aug 2007 12:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to WinApi Funktionen als Methodennamen? on Thu, 23 Aug 2007 12:31:14 GMT]]></title><description><![CDATA[<p>Ich geb mich ja ungern geschlagen, aber wenn der andere auch Martin heißt könnte ich dieses Mal eine Ausnahme machen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350422</guid><dc:creator><![CDATA[martin_salo]]></dc:creator><pubDate>Thu, 23 Aug 2007 12:31:14 GMT</pubDate></item></channel></rss>