作者awd (672012)
看板C_Sharp
标题Re: [问题] 想要从副函式回传这样的资料
时间Sat Jan 2 20:11:23 2010
感谢chirsQQ的构想
现在正照您的想法实写中,有遇到一小部份问题
请你再看一下
※ 引述《chrisQQ (ChrisLiu)》之铭言:
: public struct rectangleInfo
: {
: public Point topLeft { get; set; }
: public Point topRight { get; set; }
: public Point bottomLeft { get; set; }
: public Point bottomRight { get; set; }
: }
我在class的副函式外部写上了上述结构宣告
出现了以下的error
错误3'DIB.MConnectedLabel.rectangleInfo.topRight.get'
不是标记成 abstract 或 extern,因此必须宣告主体
等好几句
上网查了下,有人说是设定问题
我是stdio 2005版 sdk2.0
请问是我漏写了什麽部份吗?
: 你的副程式 // 假装是这样
: public ArrayList calculateRectangle()
: {
: ArrayList resultArray = new ArrayList;
: rectangleInfo rInfo = null;
: // 计算座标
: // 建立 rInfo instance
: rInfo = new rectangleInfo();
: rInfo.topLeft = new Point(1,1);
: rInfo.topRight = new Point(1,1);
: rInfo.bottomLeft = new Point(1,1);
: rInfo.bottomRight = new Point(1,1);
: // 将得到的座标加进 ArrayList
: resultArray.Add(rInfo);
: // 加入第二个矩形资料
: rInfo = new rectangleInfo();
: ...
: ...
: ...
: // 最後回传这个 ArrayList
: return resultArray;
: }
我的副函式片段如下
.
.
.
........ //前面有一些运算,以下是求每个长方形的4点座标
//ObjectNum表示长方形的个数目
ArrayList resultArray = new ArrayList();
rectangleInfo rInfo = null;
//找每个物件的4点座标//
for (int a = 0; a < ObjectNum; a++)
{
for (int y = 0; y < Height; y++)
{
for (int x = 0; x < Width; x++)
{
//符合我要的条件就将取出这点座标
if (image_label[x, y] == LevelNew[a])
{
TempX = x;
MaxX = (TempX > MaxX) ? TempX : MaxX;
//MaxX是x座标的最大值
MinX = (TempX < MinX) ? TempX : MinX;
//MinX是x座标的最小值
TempY = y;
MaxY = (TempY > MaxY) ? TempY : MaxY;
//MaxY是Y座标的最大值
MinY = (TempY < MinY) ? TempY : MinY;
//MinY是Y座标的最小值
}
}
}
//参照您的方式来存x,y的座标----------------------------------------//
// 建立 rInfo instance
rInfo = new rectangleInfo();
rInfo.topLeft = new Point(MinX, MinY);
rInfo.topRight = new Point(MaxX, MinX);
rInfo.bottomLeft = new Point(MinX, MaxY);
rInfo.bottomRight = new Point(MinX, MaxY);
// 将得到的座标加进 ArrayList
resultArray.Add(rInfo);
//------------------------------------------------------------//
//运算归零
MaxY = 0;
MinY = Height;
MaxX = 0;
MinX = Width;
TempX = 0;
TempY = 0;
}
return resultArray;
请问这样可以将每个长方形座标都存进rInfo吗?
(共有ObjectNum个长方形,希望知道长方形谁是谁)
: // 主程式或其他要接收此资料的类别
: public static void main()
: {
: ArrayList rectInfo = calculateRectangle();
: foreach (rectangleInfo rInfo in rectInfo)
: {
: // 取得矩形左上角的座标 rInfo.topLeft
: }
: }
如果我要在主函式取出每个长方形的座标
请问要如何一个一个分别取出不同的长方形呢?
是用for回圈一个一个选出长方形,再提出座标吗?
: /*
: foreach 的叙述可能有错,我每次都跟 php 搞混ˊˋ,如果错了可能就是
: foreach as。
: 也许可以为 struct rectangleInfo 加上一个 method 来一次设定所有点的值
: 例如:
: public void setAllPoint(Point tl, Point tr, Point bl, Point br)
: {
: this.topLeft = tl;
: this.topRight = tr;
: // ... 以此类推
: }
: 这样似乎不用写这麽多行 XD
: */
以上问题有点多
麻烦您的赐教~
再次感谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.163.249
※ 编辑: awd 来自: 122.117.163.249 (01/02 20:15)
1F:→ a761007:他的写法是C# 3.0才有的 01/02 21:17
2F:→ a761007:去找C#2.0 set/get写法吧 01/02 21:17
4F:→ remmurds:因为Point结构需要透过new关键字产生实体 如果你只有宣告 01/02 23:03
5F:→ remmurds:public Point p { get; set; } 当然会产生编译错误 01/02 23:05
6F:→ remmurds:这跟.Net Framework是不是3.0版没啥关联 01/02 23:07
7F:→ remmurds:也跟set/get写法没啥关连 C#的存取子向来都是长成那样 01/02 23:09