C#中的结构(无法找到类型)

时间:2010-02-03 17:20:48

标签: c# struct xna

我是C#的新手,所以请原谅这个愚蠢的问题。我正在玩一个简单的XNA游戏演示。我有一个结构,我想要几个类可用。它的定义如下:

PhotonType.cs

using System;

namespace ShipDemo
{
 public struct PhotonType {
        public Color tint;
 }
}

在同一文件夹/命名空间中的另一个文件 Ship.cs 中,我引用了这个结构:

namespace ShipDemo {
    public class Ship {
    //...
       private PhotonType photonType;
       //...
       public Ship(float x, float y, float ang, Boolean correctSound, PhotonType photonType) {
    //...
  }
}

这给了我对PhotonType的两个引用的编译错误。

  

错误1类型或命名空间名称   无法找到'PhotonType'(是   你错过了使用指令或   部件   引用?)

我在这里做错了什么?

////

此外,C#文档说

  

初始化一个错误   结构中的实例字段。

但是如果我想提供默认值呢?

我正在使用Visual Studio Ultimate 2010 Beta。

8 个答案:

答案 0 :(得分:3)

同一个项目中的2个文件是?如果您的命名空间在两个项目之间拆分,则需要在另一个项目中引用包含PhotonType的项目。

我就是这样,我会质疑设计,因为通常我们不会在多个程序集中拆分相同的命名空间。

答案 1 :(得分:3)

您的假设不正确。停止做出假设。

  1. 确保您已编译并使用程序集的最新编译版本
    • 清洁您的解决方案。重新编译您的解决方案。再试一次。
  2. 如果ShipPhotonType位于两个不同的程序集(即项目)中
    • 清理并重新编译。
    • 确保包含Ship的程序集引用包含PhotonType PROJECT
      • 引用另一个项目的DLL而不是项目
      • 是一个常见的错误
      • 这使您引用项目的旧版本而不是最新的
      • 删除对PhotonType dll的任何引用,并重新添加对其 PROJECT 的引用
  3. 如果他们在同一个解决方案中
    • 清理并重新编译。
    • 确保已编译PhotonType文件
      • 右键单击项目资源管理器中的PhotonType.cs,然后选择“属性”
      • 构建操作应为Compile
  4. 如果您仍然遇到此问题,您的项目可能会变得很糟糕
    • 它可能有noobitis。我们在开始时都经历过这一切。
    • 创建新解决方案,向其添加新项目,以及为ShipPhotonType
    • 添加新项目
    • 查看一切是否正确编译。将这个新解决方案与旧的解决方案进行比较,看看有什么不同
  5. 你可能在整个过程中做了一些奇怪的事情。如果没有看到你的项目,很难准确说出什么。如果这些都不起作用,我建议拉上你的项目并将其上传到某个地方。通过查看项目可能需要一分钟才能看出错误。

答案 2 :(得分:1)

您是否包含了包含PhotonType的命名空间?例如通过“使用”

using MyNamespace.MyLibThatContainsPhotonType;

答案 3 :(得分:1)

Re:你问题的最后一部分:如果你想要你的结构的默认值,我认为(某种程度上)标准方法是创建一个名为Default的静态只读变量,它将被初始化为你想要的价值观。静态只读变量可以在类或结构的静态构造函数中初始化。

public struct PhotonType {
    public static readonly PhotonType Default;

    public Color tint;

    static PhotonType() {
        // from here on out, PhotonType values initialized to PhotonType.Default
        // will have their tint set to Color.White
        Default = new PhotonType();
        Default.tint = Color.White;
    }
}

然后要获得默认值,您只需执行此操作:

PhotonType pt = PhotonType.Default;

答案 4 :(得分:0)

提示位于您收到的错误消息中。

  

...缺少使用指令......

using $Namespace$.ShipDemo添加到您要在其中使用PhotonType类型的代码顶部。

修改

  

两个文件都在同一名称空间中。

在您的示例代码中,您在两个示例中都说过namespace ShipDemo ...。假设您正在使用不同的文件,这将比它的价值更麻烦。

请尝试以下操作。

<强> PhotonType.cs

 using System;

 namespace ShipUtils
 {
      public struct PhotonType
      {
           public Color tint;
      }
 }

<强> Ship.cs

  using ******.ShipUtils;

  public class Ship
  {
       private PhotonType photonType;
       public Ship(float x, float y, float ang, Boolean correctSound, PhotonType photonType)
  }

答案 5 :(得分:0)

听起来像你需要

using ShipDemo;

位于Ship.cs文件的顶部。 或者确保Ship类包含在ShipDemo命名空间中:

namespace ShipDemo
{
    public class Ship
    {
        //...
    }
}

或者我们需要您发布更多代码供我们查看。

答案 6 :(得分:0)

如果是多目标XNA项目的这一部分(Windows / XBox / Zune)......如果是这样,其中一个文件可能不包含在项目中。如果不是这种情况,您可能需要仔细检查Build ACtion的{​​{1}}是否设置为PhotonType.cs(在您点击文件后,这是Compile窗格中的一个在Properties

答案 7 :(得分:0)

虽然Dan对如何提供默认值有一个很好的解决方案,但事实是,如果你想提供默认值,那么你应该使用类而不是结构。

结构是一组没有“智能”的数据,而类是知道如何使用该数据的数据组。

听起来你想给我上课。