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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Hina

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

#1

投稿記事 by Hina » 14年前

高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: メタデータエラーのためにリンクに失敗しました。

Hina

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

#2

投稿記事 by Hina » 14年前

System::String→std::stringのプログラムはあまり関係ないようです
コメントアウトしてもエラーに変化がありません。確認不足でした。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 14年前

面倒な変換しなくてもFile メソッドを使えば解決の気がします。

「File メソッド (System.IO)」
http://msdn.microsoft.com/ja-jp/library/3z2ck8eh.aspx
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Hina

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

#4

投稿記事 by Hina » 14年前

そのようなクラスがあったのは知りませんでした。
有効に使っていきたいと思います。

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#5

投稿記事 by softya(ソフト屋) » 14年前

const char* chars = ってしなくて良くなったのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Blue

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

#6

投稿記事 by Blue » 14年前

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

Hina

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

#7

投稿記事 by Hina » 14年前

>>softyaさん
Fileメソッドの関数をつかうことにしてvoid MarshalString ( String ^ s, string& os )の関数は消してしまったので、
const char* chars = のような代入はしてないです。

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

閉鎖

“C言語何でも質問掲示板” へ戻る