2012-11-15 2 views
-1

현재 컨텍스트에 존재 않습니다 비주얼 스튜디오 당신이 그 두 가지를 볼 필요가 없습니다 생각 2012이름은 없습니다 나는 두 개의 파일받은

@ Sumator.cs 및 Kalkulator.cs을하지만 어쨌든 여기에 두었고 페이지를 내려 가서 내 문제를 확인하십시오.

Sumator.cs 코드 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Sumator2 
{ 
class Sumator 
{ 
    bool Status = false; 
    double Suma = 0; 
    public Kalkulator Kalk = new Kalkulator(); 
    public Sumator() 
    { 
    } 

    public void ZmienStatus() 
    { 
     Status = !Status; 
    } 
    public string PokazStatus() 
    { 

     if (Status == true) 
      return " Sumator włączony"; 
     else 
      return " Sumator wyłaczony"; 

    } 

    public void PokazWynikS() 
    { 
     if (Status == true) 
      Suma += Kalk.Wynik; 
     Console.WriteLine("Wynik działania : " + Kalk.L1.ToString() + " " + Kalk.Dzialanie.ToString() + " " + Kalk.L2.ToString() + " = " + Kalk.Wynik.ToString() + PokazStatus() + " Suma= " + Suma.ToString()); 
    } 

    public void Zeruj() 
    { 
     Suma = 0; 
    } 
} 
} 

Kalkulator.cs 코드 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Sumator2 
{ 
class Kalkulator 
{ 
    public double L1; 
    public double L2; 
    public double Wynik; 
    public String Dzialanie = ""; 
    public Kalkulator() 
    { 
    } 
     void Oblicz() 
    { 
     switch (Dzialanie) 
     { 
      case "+": 
       Wynik = L1 + L2; 
       break; 
      case "-": 
       Wynik = L1 - L2; 
       break; 
      case "*": 
       Wynik = L1 * L2; 
       break; 
      case "/": 
       Wynik = L1/L2; 
       break; 

     } 
    } 
    public void PodajDzialanie(double licz1, double licz2, string dz) 
    { 
     L1 = licz1; 
     L2 = licz2; 
     Dzialanie = dz; 
     Oblicz(); 

    } 
    public void PokazWynik() 
    { 
     Console.WriteLine("Wynik działania : " + L1.ToString() + " " + Dzialanie.ToString() + " " + L2.ToString() + " = " + Wynik.ToString()); 
    } 

} 
} 

나는 그 두 내 주요 코드를 작성했습니다. Program.cs 코드 :

s1.Kalk.PodajDzialanie(userDouble, 2, "*"); 

과 내가 같은 오류가 발생했습니다 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Sumator2 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Sumator s1 = new Sumator(); 

     s1.ZmienStatus(); 

     bool userNum = true; 
     while (userNum) 
     { 
      double userDouble; 
      string userString = Console.ReadLine(); 

      if (userNum = double.TryParse(userString, out userDouble)) 
      { 
       userDouble = Convert.ToDouble(userString); 
       userNum = false; 
      } 
      else 
      { 
       Console.WriteLine("Nie podano liczby!"); 
       userNum = true; 
      } 
     } 


     s1.Kalk.PodajDzialanie(userDouble, 2, "*"); 
     s1.PokazWynikS(); 
     s1.Kalk.PokazWynik(); 

     s1.Kalk.PodajDzialanie(userDouble, 2, "+"); 
     s1.PokazWynikS(); 
     s1.Kalk.PokazWynik(); 


     Console.ReadKey(); 
    } 
} 
} 

문제는 내가 그 인수 s1.Kalk.PodajDzialanie() 함수를 사용하고 싶어한다는 것입니다

The name 'userDouble' does not exists in the current context 

나는 wt *를 의미합니까? 내가 좋아하는 경우이 기능은 정상적으로 작동합니까 : 당신은 당신의 while 루프 내에서 userDouble를 선언하고

s1.Kalk.PodajDzialanie(2, 2, "*"); 
+0

문제를 복제하는 데 필요한 코드의 작은 금액을 게시 해보세요 :

{ declaration; work; } call; // doesn't work 

그러나이 작업을 수행합니다. 이 문제를 해결하기 위해 3 페이지의 코드를 사용하지 않습니다. – Servy

+0

구문 분석 작업을 수행 한 후에도'userDouble' 결과를 얻을 수 있습니까? 어쩌면 값이 누락되었을 수 있습니다. 또한, 영어를 사용하는 주요 인물에게 영어로 의견을 달아 주실 수 있습니까? (이 경우에는 필요하지 않지만 좀 더 복잡한 질문에는 도움이됩니다) – Steven

+0

저는 문제가 어디 있는지 정말로 알지 못했습니다. 어쨌든 그것은 루키 실수 였고 지금은 모두 작동하고 있으며 코드로 계속 진행할 수 있습니다. 다시 한번 고마워! – SubZeroFX

답변

10

. 루프를 빠져 나가면 범위를 벗어납니다. 루프 이전으로 이동하면 문제가되지 않습니다. 그래서 대신 당신은 가지고있다 :

bool userNum = true; 
double userDouble; 
while (userNum) 
{  
    string userString = Console.ReadLine(); 

    // Jesli sa liczby to convertujemy 
    if (userNum = double.TryParse(userString, out userDouble)) 
    { 
     userDouble = Convert.ToDouble(userString); 
     userNum = false; 
    } 
    else 
    { 
     Console.WriteLine("Nie podano liczby!"); 
     userNum = true; 
    } 
} 
+0

고마워, 지금 일하고있어! – SubZeroFX

+0

대단히 반갑습니다. 다행히 도울 수있어. – MyCodeSucks

2

함수가 액세스 할 수없는 범위에서 userDouble을 선언하고있다.

이에 코드를 변경

:

static void Main(string[] args) 
    { 
     Sumator s1 = new Sumator(); 
     double userDouble; //moved declaration out of while loop 

     s1.ZmienStatus(); 

     // Sprawdzanie czy w stringu sa liczby 
     bool userNum = true; 
     while (userNum) 
     { 

      string userString = Console.ReadLine(); 

      // Jesli sa liczby to convertujemy 
      if (userNum = double.TryParse(userString, out userDouble)) 
      { 
       userDouble = Convert.ToDouble(userString); 
       userNum = false; 
      } 
      else 
      { 
       Console.WriteLine("Nie podano liczby!"); 
       userNum = true; 
      } 
     } 


     s1.Kalk.PodajDzialanie(userDouble, 2, "*"); 
     s1.PokazWynikS(); 
     s1.Kalk.PokazWynik(); 

     s1.Kalk.PodajDzialanie(userDouble, 2, "+"); 
     s1.PokazWynikS(); 
     s1.Kalk.PokazWynik(); 


     Console.ReadKey(); 
    } 
2

귀하의 변수를 두 번 userDouble을; while 루프 내에서 선언되면 외부로 이동해야합니다. 또는 mvoe s1.Kalk.PodajDzialanie (userDouble, 2, "*"); while 루프가 끝나기 전에

2

변수 내에서 userDouble이 블록 내에서 선언되며 수행하려는 호출이 해당 블록 외부에 있습니다. 따라서 변수가 범위를 벗어 났으므로 호출의 컨텍스트에 존재하지 않습니다.

declaration; 
{ 
    work; 
} 

call; // OK 
관련 문제