Ошибки компилятора C ++ в xamltypeinfo.g.cpp - PullRequest
8 голосов
/ 22 марта 2012

Я, должно быть, упускаю что-то очевидное, но я не уверен, что.

Я создал пустое приложение C ++ metro и только что добавил модель, к которой буду привязываться в своем пользовательском интерфейсе, однако яполучаю ряд ошибок компилятора, связанных с 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));
    }
}

Ничего сложного, но при компиляции я получаю ошибки в xamltypeinfo.g.cpp, указывающие, что MyColor не определено в CppDataBinding.

сгенерированный код выглядит следующим образом:

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;
}

Если я удаляю атрибут Bindable из MyColor, код компилируется.

Может кто-нибудь сказать мне, что такое ослепительно очевидное, что я пропустил, такЯ могу дать себе маску и решить проблему?

1 Ответ

14 голосов
/ 22 марта 2012

Я внес одно небольшое изменение, и теперь оно работает.

Я добавил

#include "MyColor.h"

в файл BlankPage.xaml.h, хотя я еще не добавил никаких других ссылок на MyColor и теперь он компилируется.

Я думаю, если вы сделаете что-то [Bindable], заголовок должен быть включен как минимум в одну страницу xaml, чтобы он работал.Привязываемый тип, на который нигде нет ссылок, вызывает ошибки компилятора.

...