2012-03-21 21 views
7

明らかに何かが間違っている必要がありますが、わかりません。xamltypeinfo.g.cppのC++コンパイラエラー

私はブランクのC++メトロアプリを作成しました。私はUIにバインドするモデルを追加しましたが、xamltypeinfo.g.cppに関連するコンパイラエラーが発生しています。逃した。

私のヘッダファイルには、次のようになります。

#pragma once 
#include "pch.h" 
#include "MyColor.h" 

using namespace Platform; 

namespace CppDataBinding 
{ 
    [Windows::UI::Xaml::Data::Bindable] 
    public ref class MyColor sealed : Windows::UI::Xaml::Data::INotifyPropertyChanged 
    { 
    public: 
     MyColor(); 
     ~MyColor(); 

     virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged; 
     property Platform::String^ RedValue 
     { 
      Platform::String^ get() 
      { 
       return _redValue; 
      } 
      void set(Platform::String^ value) 
      { 
       _redValue = value; 
       RaisePropertyChanged("RedValue"); 
      } 
     } 

    protected: 
     void RaisePropertyChanged(Platform::String^ name); 

    private: 
     Platform::String^ _redValue; 
    }; 
} 

と私のcppファイルは次のようになります。

#include "pch.h" 
#include "MyColor.h" 

using namespace CppDataBinding; 

MyColor::MyColor() 
{ 
} 

MyColor::~MyColor() 
{ 
} 

void MyColor::RaisePropertyChanged(Platform::String^ name) 
{ 
    if (PropertyChanged != nullptr) 
    { 
     PropertyChanged(this, ref new Windows::UI::Xaml::Data::PropertyChangedEventArgs(name)); 
    } 
} 

あまりにもトリッキー何もないが、私はMyColorであることを示すxamltypeinfo.g.cppのエラーを取得するコンパイルするときCppDataBindingで定義されていません。私はコードがコンパイルMyColorからBindable属性を削除した場合

if (typeName == "CppDataBinding.MyColor") 
{ 
    userType = ref new XamlUserType(this, typeName, GetXamlTypeByName("Object")); 
    userType->Activator = ref new XamlTypeInfo::InfoProvider::Activator(
          []() -> Platform::Object^ 
          { 
           return ref new CppDataBinding::MyColor(); 
          }); 
    userType->AddMemberName("RedValue", "CppDataBinding.MyColor.RedValue"); 
    userType->SetIsBindable(); 
    xamlType = userType; 
} 

関連生成されたコードは次のようになります。

誰かがぼんやりと明白なことを私に教えてもらえますか?私は自分自身に顔面を置き、問題を解決できますか?

+0

明らかに間違っていたことは、あなたがここで使っているものは何でも、C++ではないということです。 –

+0

コンパイラはどのようなエラーメッセージを表示しますか? –

+0

このxor "^"は "Platform :: String ^"とは何ですか? –

答えて

14

小さな変更を加えて動作します。

私はまだMyColorに、他の参照を追加していないし、それが今でコンパイルしていても、BlankPage.xaml.hファイルに

#include "MyColor.h" 

を追加しました。

[Bindable]あなたが何かを作ったら、少なくとも1つのxamlページにヘッダーが含まれていなければなりません。どこでも参照されないバインド可能な型は、コンパイラエラーを引き起こします。

+0

ああ、はい。あなたの分析は正しいです。これはXAMLコンパイラの制限です。 –

+0

私は同意します、これは間違いありません。私はそれがApp.xaml.hの中に置いているクリーンさの面では、より意味をなさないかもしれないと思う、グローバルなもののための良い場所のように思える。 – guysherman

+0

プロジェクトが* .xaml.hを持たないカスタムコントロールの場合はどうなりますか?今のところpch.hを汚染することは、私がそれを機能させるために考えることができる方法です。 –

関連する問題