Не ошибка члена, когда C ++ winrt Page Class используется вместе со страницей XAML - PullRequest
0 голосов
/ 21 ноября 2018

Я создаю простую программу ActionTracker.У меня очень простой XAML-файл:

// XAML-файл

 <Page
    x:Class="ActionTracker_V3.ActionDetails"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:ActionTracker_V3"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <TextBox Text="{x:Bind temp, Mode=OneWay}"></TextBox>
    </Grid>
</Page>

Класс поддержки выполнения определяется как:

// IDL-файл

namespace ActionTracker_V3
{
runtimeclass ActionDetails : Windows.UI.Xaml.Controls.Page
{
    ActionDetails();
    String temp;
}
 }

Связанные файлы * .h и * .cpp показаны ниже:

#include "ActionDetails.g.h"

namespace winrt::ActionTracker_V3::implementation
{
struct ActionDetails : ActionDetailsT<ActionDetails>
{
    ActionDetails();

    hstring temp();
    void temp(hstring const& value);
};
}

namespace winrt::ActionTracker_V3::factory_implementation
{
   struct ActionDetails : ActionDetailsT<ActionDetails,    implementation::ActionDetails>
{};
}

Файл * .cpp:

#include "pch.h"
#include "ActionDetails.h"

 namespace winrt::ActionTracker_V3::implementation
 {
ActionDetails::ActionDetails() 
{
    InitializeComponent();
}

hstring ActionDetails::temp()
{
    throw hresult_not_implemented();
}

void ActionDetails::temp(hstring const& value)
{
    throw hresult_not_implemented();
}
}

Однако, когда я компилирую этифайлы Я получаю следующие ошибки:

Error   C2039   'ActionDetails': is not a member  of 'winrt::ActionTracker_V3::implementation'  ActionTracker_V3    c:\users\kurian.kattukaren\source\repos\actiontracker_v3\actiontracker_v3\generated files\xamltypeinfo.g.cpp        

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

1 Ответ

0 голосов
/ 26 ноября 2018

В соответствии с шагами по устранению неполадок, перечисленными здесь здесь :

Компилятор C ++ выдает ошибку "Implements_type": не является членом какого-либо прямого или косвенного базового класса '' ".

Это может произойти, когда вы вызываете make с незавершенным именем вашего типа типа реализации (например, MyRuntimeClass), и вы не включили заголовок этого типа.Компилятор интерпретирует MyRuntimeClass как спроецированный тип.Решение состоит в том, чтобы включить заголовок для вашего типа реализации (например, MyRuntimeClass.h).

Я скопировал приведенную выше информацию, просто хочу сказать, что ваша проблема может из-за того, что компилятор не может найти правильный заголовок из вашегопроект.Но это не значит, что у вашего кода есть какие-либо проблемы.Возможно, что некоторые настройки не верны, или это просто проблема Visual Studio.Без вашего проекта я тоже не могу быть уверен.Если это всегда происходит в вашей среде, и вы уверены, что ваш код верен, сообщите об этом прямо из Visual Studio-> О программе-> Отправить отзыв на форуме сообщества разработчиков.

В любом случае, в любое время, если у вас возникла странная ошибка в вашем проекте, вы можете сначала попробовать новый проект в качестве теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...