ページ 11

error lnk2022の解決方法がわかりません

Posted: 2011年8月23日(火) 12:50
by Hina
高2で初心者です。よろしく願いします
VC++2010のwindowsFormでプログラムをつくっているのですが、テキストボックスのテキストを.txtファイルに出力するためにtextBoxのテキストの型であるSystem::Stringをstd::stringに変換するプログラムを入れたところ、エラーが出てきて意味もわからず詰んでしまっています。
解決策をお願いします。

//System::String→std::string
#include<string>
using namespace std;
using namespace System;
void MarshalString ( String ^ s, string& os ) {
using namespace Runtime::InteropServices;
const char* chars =
(const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
os = chars;
Marshal::FreeHGlobal(IntPtr((void*)chars));
}

エラー
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std._String_const_iterator<char,std::char_traits<char>,std::allocator<char> >): (0x02000019)。
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x0200003d)。
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std.basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >): (0x02000063)。
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std._String_iterator<char,std::char_traits<char>,std::allocator<char> >): (0x02000080)。
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std._String_val<char,std::allocator<char> >): (0x02000081)。
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std._String_val<wchar_t,std::allocator<wchar_t> >): (0x02000083)。
1>LINK : fatal error LNK1255: メタデータエラーのためにリンクに失敗しました。

Re: error lnk2022の解決方法がわかりません

Posted: 2011年8月23日(火) 12:58
by Hina
System::String→std::stringのプログラムはあまり関係ないようです
コメントアウトしてもエラーに変化がありません。確認不足でした。

Re: error lnk2022の解決方法がわかりません

Posted: 2011年8月23日(火) 13:23
by softya(ソフト屋)
面倒な変換しなくてもFile メソッドを使えば解決の気がします。

「File メソッド (System.IO)」
http://msdn.microsoft.com/ja-jp/library/3z2ck8eh.aspx

Re: error lnk2022の解決方法がわかりません

Posted: 2011年8月23日(火) 14:25
by Hina
そのようなクラスがあったのは知りませんでした。
有効に使っていきたいと思います。

ただ、error lnk2022が解決されません。
解決方法はなにかないでしょうか

Re: error lnk2022の解決方法がわかりません

Posted: 2011年8月23日(火) 15:10
by softya(ソフト屋)
const char* chars = ってしなくて良くなったのでは?

Re: error lnk2022の解決方法がわかりません

Posted: 2011年8月23日(火) 15:11
by Blue
System::IO::Fileを使うなら、std::stringは必要ないですね?

>#include<string>
>using namespace std;
これ消したらどうなりますか?

もしくは、
>using namespace std;
をやめて、std::~~ と記述するとどうでしょうか?

リンカ ツール エラー LNK2022
http://msdn.microsoft.com/ja-jp/library ... 80%29.aspx

Re: error lnk2022の解決方法がわかりません

Posted: 2011年8月23日(火) 15:50
by Hina
>>softyaさん
Fileメソッドの関数をつかうことにしてvoid MarshalString ( String ^ s, string& os )の関数は消してしまったので、
const char* chars = のような代入はしてないです。

>>Blueさん
>#include<string>
>using namespace std;
この二つを消したら、エラーは消えました!
ありがとうございました