kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

C++/CLIではづかしいミス

//hoge.h
#include "foo.h"
public ref class hoge {
 ...
};
//hoge.cpp
#include "hoge.h"
hoge::hoge()
{
}

//foo.cpp
#include "stdafx.h"
#include "foo.h"
#include "hoge.h"
ref class foo {
  hoge^ m_hogehoge;
}

こんな感じで書いたソースがなぜかhoge^ のところでコンパイルエラー(^がここではまずい)。真剣に悩んだけど、単に#includeのミスだった…。#pragma onceで一度しか読み込まれないけれど、その辺で定義がまずくなった。ああはずかしい。C++/CLIの仕様で何か見落としているものがあるのかと真剣に考え込んでしまった。
他にも(char *)に渡すのに、Marshal::StringToHGlobalAnsi(String^)で、ToPointer()としなきゃいけない所をマネージドコードの癖で、ToString()と書いてしまい、「なんで『String^を(char *)に代入しようとしています』というエラーが出るんだろう」と悩んでみたり。

String^ hoge[] = gcnew...

とか書いてみたり(もちろん間違い)。こうやって手探りしつつ、C++/CLI覚えていってます(^^;。