2013-04-09 2 views
1

이 질문을 몇 번 본 적이 있는데 왜 이것이 작동하지 않는지 내 머리를 터지게 할 수 없습니다. 멍청한 놈 도와주세요! COM 포트의 이름을 받아들이고 해당 포트에서 직렬 객체를 시작하는 클래스를 만들려고합니다. "Conex에는 하나의 인수를 허용하는 생성자가 포함되어 있지 않습니다."라는 오류가 계속 발생합니다. 생각? 내 주에 포함(아마도) 간단한 설명 - 생성자 정의 및 인수

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO.Ports; 

namespace Conex_Commands 
{ 

    public class Conex 
    { 
     string NewLine = "\r"; 
     int BaudRate = 921600, DataBits = 8, ReadTimeout = 100, WriteTimeout = 100; 
     Parity Parity = Parity.None; 
     StopBits StopBits = StopBits.One; 


     public Conex(string PortName) 
     { 
      SerialPort Serial = new SerialPort(PortName, BaudRate, Parity, DataBits, StopBits); 
      Serial.ReadTimeout = ReadTimeout; 
      Serial.WriteTimeout = WriteTimeout; 
      Serial.NewLine = NewLine; 
     } 



    } 


} 

호출 코드 는 다음과 같습니다

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Conex_Commands; 


namespace Tester 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      Conex abc = new Conex("COM5"); 
     } 
    } 
} 
+6

또한 Conex 클래스뿐만 아니라 오류를 발생시키는 호출 코드도 표시하십시오. –

+0

Conex라는 두 가지 유형이 있습니까? 당신이 여기에 보여주는 수업과 같은 어셈블리에서 코드를 작성합니까? –

+0

프로젝트를 컴파일했는지 확인하십시오. '빠져있다'면 구성 관리자 – NSGaga

답변

0

가 디버깅을 위해 그냥이 있습니까?

내 VS2010 코드는이 코드에 오류가 없음을 보여줍니다.

Conex에 대한 생성자를 호출하자마자 SerialPort이 범위를 벗어나기 때문에 작성된 것처럼 쓸모가 없습니다.

대신, 생성자 외부에서 Serial 객체를 가지고 :

public class Conex { 
    string NewLine = "\r"; 
    int BaudRate = 921600, DataBits = 8, ReadTimeout = 100, WriteTimeout = 100; 
    Parity Parity = Parity.None; 
    StopBits StopBits = StopBits.One; 
    SerialPort Serial; 

    public Conex(string PortName) { 
    Serial = new SerialPort(PortName, BaudRate, Parity, DataBits, StopBits); 
    Serial.ReadTimeout = ReadTimeout; 
    Serial.WriteTimeout = WriteTimeout; 
    Serial.NewLine = NewLine; 
    } 

    public void Open() { 
    Serial.Open(); 
    } 

    public void Close() { 
    Serial.Close(); 
    } 

} 

지금, 당신의 Main 루틴 내에서, 당신이 실제로 내 PC에 예외를 던졌다 연결을 (열고 닫고 시도 할 수 있기 때문에 "COM5"포트는 없습니다) :

static void Main(string[] args) { 
    Conex abc = new Conex("COM5"); 
    abc.Open(); 
    abc.Close(); 
} 
+0

감사! 나는 뼈대가 움직이는 것을 발견했다. 원래의 .cs에서 작업 중이었고 테스터 프로그램 내에 배치 한 참조로 업데이트하지 않았다. – Nick