線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:730
推到 Plurk!
推到 Facebook!

如何定義VERTOR傳入某個CLASS內

尚未結案
miloshop
一般會員


發表:8
回覆:22
積分:6
註冊:2004-10-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-01 15:38:01 IP:220.131.xxx.xxx 未訂閱
各位大大好,我想請教一個問題,如果我用VECTOR容器儲存一個影像的集合,例如: vector bond(100); vector::iterator p; 然後呢我想在CLASS A裡頭的某個函數把這個VECTOR傳入進去(Bound類別),然後對Bound這個類別裡的某一個變數做加總,那我應該如何的宣告呢??不知道各位大大有沒有這樣子的經驗呢?? XXX.h #include "Unit1.h" //-------------------------------- class A { public: int Avlen(vector *kk); //我本來是這樣寫,不過發現好像有錯誤,不知道該怎麼寫 } XXX.cpp int Bound::Avlen(vector *kk) { ........ ........ } p.s 如果我沒有在xxx.h裡include "Unit1.h" 則會出現expected的問題,我不知道為什麼,有大大清楚嗎??謝謝
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-01 16:43:12 IP:210.243.xxx.xxx 未訂閱
用friend關鍵字, 下面是一個小範例
// Unit1.h
//---------------------------------------------------------------------------    #ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include <Forms.hpp>
#include     //---------------------------------------------------------------------------
class Bound
{
  public:
    Bound(): i(100) { };
    int i;
    int Avlen(vector* kk);
};    class TForm1 : public TForm
{
__published:        // IDE-managed Components
  TButton *Button1;
  void __fastcall Button1Click(TObject *Sender);
private:        // User declarations
public:                // User declarations
  __fastcall TForm1(TComponent* Owner);      friend int Bound::Avlen(vector* kk);
};    //---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
/////////////////////////////////////////////////////////////////////////////
//Unit1.cpp    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
int Bound::Avlen(vector* kk)
{
  // 回傳vector的size   Bound的變數i.
  return kk->size()   i;
}    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  vector bond(100);
  vector::iterator p;      Bound bound;
  ShowMessage( IntToStr(bound.Avlen(&bond)) );
}
//---------------------------------------------------------------------------
miloshop
一般會員


發表:8
回覆:22
積分:6
註冊:2004-10-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-02 14:20:58 IP:220.131.xxx.xxx 未訂閱
謝謝大大的回覆,小弟感謝萬分 看來自己對物件導向程式設計還得再多下點功夫了 我想再請教大大一個問題 如果..現在我有在一個CPP裡頭定義了一個 static int k1[300][400] 我現在想要將他傳入一個函數裡,書上寫的是說,如果要指定一個函數的參數為陣列時,得需要設定其右 INDEX如 void calculate(int matrix[][400])或是 void calculate(int matrix[300][400]) 那如果我現在要傳入到這個函數裡的話,我用這個方法似乎可行,但是如果我今天想使用POINT來做時,我要怎麼改寫呢??因為這樣好像很浪費記憶體的感覺,但是當我在實作時,卻一直遇到EXPECTED這個訊息,不知道我該怎麼改宣告或是函數的參數值呢? <> static int k1[300][400] void calculate(int* matrix[300][400]) 小弟初學C 請多指教,問的問題笨了點
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-02 15:24:41 IP:210.243.xxx.xxx 未訂閱
引言: 謝謝大大的回覆,小弟感謝萬分 看來自己對物件導向程式設計還得再多下點功夫了 我想再請教大大一個問題 如果..現在我有在一個CPP裡頭定義了一個 static int k1[300][400] 我現在想要將他傳入一個函數裡,書上寫的是說,如果要指定一個函數的參數為陣列時,得需要設定其右 INDEX如 void calculate(int matrix[][400])或是 void calculate(int matrix[300][400]) 那如果我現在要傳入到這個函數裡的話,我用這個方法似乎可行,但是如果我今天想使用POINT來做時,我要怎麼改寫呢??因為這樣好像很浪費記憶體的感覺,但是當我在實作時,卻一直遇到EXPECTED這個訊息,不知道我該怎麼改宣告或是函數的參數值呢? <> static int k1[300][400] void calculate(int* matrix[300][400]) 小弟初學C 請多指教,問的問題笨了點
範例如下
int Test(int** array)
{
  return array[0][1];    void __fastcall TForm1::Button2Click(TObject *Sender)
{
  static int k1[300][400] = {0, 100, 2, };
  int* p = &k1[0][0];
  ShowMessage(IntToStr(Test( &p )));    }    細節你可以參考這篇
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=61764
miloshop
一般會員


發表:8
回覆:22
積分:6
註冊:2004-10-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-03 21:46:59 IP:219.70.xxx.xxx 未訂閱
ZARD大大您好,我有試過您的方法,不過這樣子傳送k1[0][0]的話是只能存取k1[0][X]的位址嗎??那如果我要存取的位置是任一個位址的話是不是就沒有辦法了,例如:K1[3][2],因為我在另一個成員函數裡頭不想要去管是那一個地方送過來的,所以我才想說是不是可以這樣子去做呢??麻煩大大建議一下好嗎?? PS:或是我將P1設成是PUBLIC的變數,但是這樣在另一個CLASS裡還是得知道送進來的部份...!! 謝謝大大賜教
miloshop
一般會員


發表:8
回覆:22
積分:6
註冊:2004-10-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-03 23:16:54 IP:219.70.xxx.xxx 未訂閱
謝謝大大,我已經想到一個方法了,先將一維指標傳入B CLASS裡,再由CLASS B函數裡去得到真實的座標位置 TKS 有DELPHI K TOP真好
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-07 01:28:29 IP:211.76.xxx.xxx 未訂閱
miloshop你好:     提供另一個方法,傳Reference:  
 
friend int Bound::Avlen(vector& kk);
系統時間:2024-05-19 18:18:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!