Visual Studio 2003 C#,结构编译错误
Posted
技术标签:
【中文标题】Visual Studio 2003 C#,结构编译错误【英文标题】:Visual Studio 2003 C#, struct compiling erro 【发布时间】:2013-09-25 15:17:01 【问题描述】:我在编译过程中遇到了 struct 的问题。我用 c# 编程并使用 Visual Studio 2003。From MSDN:
当您使用 new 运算符创建一个结构对象时,它会被创建并调用相应的构造函数。与类不同,结构可以在不使用 new 运算符的情况下进行实例化。如果不使用 new,则字段将保持未分配状态,并且在所有字段都初始化之前无法使用对象。
您可以在没有 new() 语句的情况下实例化结构;在我的电脑上它可以完美运行,而在另一台电脑上我看到编译错误(需要 new())。 Visual Studio 的环境中是否有一些过滤器或标志(如 TreatWarningsAsErrors)会产生这种行为?
一个例子:
using System;
using System.Collections;
namespace myApp.Utils
....
public struct StructParam
public int iIndex;
public int[] iStartNoteArray;
public int[] iFinalNoteArray;
public int[] iDimension;
public int[] iStartSequence;
public ArrayList m_iRowIncValueArray;
;
....
--------------------------------------------------------------
--------------------------------------------------------------
using System;
using System.Collections;
using myApp.Utils;
namespace myApp.Main
....
public class frmMain : System.Windows.Forms.Form
....
static void Main()
....
StructParam oStructParam;
oStructParam.iIndex = 0;
oStructParam.iStartNoteArray = new int[]0, 0;
oStructParam.iFinalNoteArray = new int[]0, 0;
oStructParam.iDimension = new int[]0, 0;
oStructParam.iStartSequence = new int[]0, 0;
oStructParam.m_iRowIncValueArray = new ArrayList();
ArrayList myArray = new ArrayList();
myArray.Add(oStructParam);
....
.....
....
我认为问题不在于代码,而在于某些 Visual Studio 的环境变量。
【问题讨论】:
请给出一个简短但完整的程序来说明问题。您使用 10 年前的 Visual Studio 版本有什么原因吗? 您好,我必须使用 Visual Studio 2003 来实现向后兼容性(不幸的是,这不是我的选择)... 那么确切的错误信息是什么,在哪一行? 您好,编译器错误是“未分配使用局部变量 'oStructParam'。”错误出现在“myArray.Add(oStructParam);”上。谢谢。 嗯。两种情况下的编译器版本完全相同? 【参考方案1】:要在不调用 new 的情况下使用结构,必须先分配其所有成员。
例如,
struct Point
public int x;
public int y;
public int DoSomething() return x * y;
Point p;
p.x = 1;
p.y = 2;
p.DoSomething();
注意这里的 x 和 y 是字段,而不是属性。在使用该结构之前,您必须分配所有字段。如果您要包含一个自动属性,例如,您无权访问基础字段,那么这是不可能的。
【讨论】:
当然,假设它是一个局部变量。如果它是一个实例/静态变量,它只会得到默认值。以上是关于Visual Studio 2003 C#,结构编译错误的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net - 从 Visual Studio 2003 过渡到 Visual Studio 2010
使用部分类和设计器文件将 Visual Studio 2003 表单转换为 Visual Studio 2005/2008 表单