2012-04-22 82 views
2

我试图通过添加几个函数来扩展列表框。我收到一个错误(错误C2144:语法错误:'Extended_ListBox'应该以':'开头)。有谁会请教我如何解决它?我去了VC++所说的错误,但我不知道为什么构造函数有错误。如何在VC++中扩展列表框

using namespace System; 
using namespace System::ComponentModel; 
using namespace System::Collections; 
using namespace System::Windows::Forms; 
using namespace System::Data; 
using namespace System::Drawing; 
using namespace System::Collections; 
using namespace System::Collections::Generic; 

#include <stdio.h> 
#include <stdlib.h> 
#using <mscorlib.dll> 


public ref class Extended_ListBox: public ListBox{ 

    public Extended_ListBox(array<String ^>^textLineArray, int counter){ 
     textLineArray_store = gcnew array<String ^>(counter); 
     for (int i=0; i<counter; i++){ 
      this->Items->Add(textLineArray[i]); 
      textLineArray_store[i] = textLineArray[i]; 
     } 
     this->FormattingEnabled = true; 
     this->Size = System::Drawing::Size(380, 225); 
     this->TabIndex = 0; 
     this->SelectedIndexChanged += gcnew System::EventHandler(this, &Extended_ListBox::listBox1_SelectedIndexChanged); 
    } 
    public Extended_ListBox(){ 
     this->FormattingEnabled = true; 
     this->Size = System::Drawing::Size(380, 225); 
     this->TabIndex = 0; 
     this->SelectedIndexChanged += gcnew System::EventHandler(this, &Extended_ListBox::listBox1_SelectedIndexChanged); 
    } 
    private: System::Void listBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) { 
       int index=this->SelectedIndex; 
       tempstring = textLineArray_store[index]; 
     } 

private: array<String ^>^textLineArray_store; 
private: String ^tempstring; 
public: String ^GetSelectedString(){ 
      return tempstring; 
     } 
public: void ListBox_Update(array <String ^>^textLineArray, int counter){ 
     textLineArray_store = gcnew array<String ^>(counter); 
     for (int i=0; i<counter; i++){ 
      this->Items->Add(textLineArray[i]); 
      textLineArray_store[i] = textLineArray[i]; 
     } 
     } 
}; 

回答

1

在C++/CLI中,指定访问修饰符(public,private等)的方式与在C#或Java中的方式不同。

相反,你只写一行(注意冒号,这是必需的):

public: 

和所有以下成员是公开的。因此,在构造函数之前插入该行,并在构造函数之前删除关键字public。这样的:

public ref class Extended_ListBox: public ListBox{ 
public: 
    Extended_ListBox(array<String ^>^textLineArray, int counter){ 
     // constructor code 
    } 

    Extended_ListBox(){ 
     // default constructor code 
    } 

    // other public members 
    // ... 

private: 
    // private members 
    // ... 
} 

类似于下面的构造函数中的成员当前的例子,只是你没有明确地重申public:private:如果下一个成员具有相同的可见性。