与XAML页面一起使用的C ++ winrt页面类不是成员错误

时间:2018-11-20 22:35:55

标签: c++ uwp winrt-xaml uwp-xaml c++-winrt

我正在构建一个简单的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 :(得分:0)

根据here列出的故障排除步骤:

C ++编译器产生错误“'implements_type':不是”的任何直接或间接基类的成员。

当您使用实现类型的名称空间非限定名称(例如,MyRuntimeClass)调用make时,并且没有包括该类型的标头时,可能会发生这种情况。编译器将MyRuntimeClass解释为投影类型。解决方案是包括您的实现类型的标题(例如MyRuntimeClass.h)。

我复制了以上信息,只是想说您的问题可能是由于编译器无法从您的项目中找到正确的标头。但这并不意味着您的代码有任何问题。某些设置可能不正确,或者仅仅是Visual Studio的问题。没有您的项目,我也无法确定。如果在您的环境中总是发生这种情况,并且您确定代码正确,请直接从Visual Studio->关于->将反馈发送给开发者社区论坛。

无论如何,如果您的项目出现严重错误,则可以先尝试使用新项目作为测试。