2012-05-30 2 views
1

분수 계산의 목표를 달성하기 위해 구조체를 올바르게 사용하는 방법을 알지 못합니다 (필수 사항 임). 솔직히 솔직히 내가하고있는 일에 대한 생각이별로 없어요. 이것은 C++의 제 3 클래스입니다. 잃어버린 느낌 ...이게 바로 과제입니다.struct를 이해하는 데 도움이 필요하고 프로그램에서 몇 가지 오류가 발생합니다.

Enter() 함수는 사용자로부터 소수를 받아들입니다. simplify() 함수는 이 가능한 경우받는 부분을 단순화합니다. display() 함수는 이받는 분수를 표시합니다.

전역 함수는 분수 형식을 사용합니다. 분수 유형은 분수의 분자와 분모를 별도의 데이터 멤버로 보유합니다.

내 프로그램은 " CIN"EXCEPT 만 메인 및 " COUT "이고 GCF 기능 해봤 주요 외부에서 교수에 의해 모든 다른 기능과 구조체를 구비 한 ...

#include <iostream> 
using namespace std; 

void entry (int a, int b); 
void simplify (double c); 
void display(int x, int y) 

int main() 
{ 

    struct Fraction fraction; 
     cout << "Enter a numerator: " << endl; 
     cin >> fraction.num; 
     cout << "Enter a denominator: " << endl; 
     cin >> fraction.den; 

    cout << "Fraction Simplifier" << endl; 
    cout << "===================" << endl; 

    enter(&fraction); 
    simplify(&fraction); 
    display(fraction); 
} 



     struct Fraction { 
       int num; 
       int den; 
       } 


     struct Fraction fraction{ 
       fraction.num; 
       fraction.den; 
       } 

     void display(int num, int den) { 
       cout << fraction.num << endl; 
       cout << fraction.den << endl; 
       } 



// Great Common Factor (Euclid's Algorithm), provided by Professor 

int gcf(int num1, int num2) 

{ 

    int remainder = num2 % num1; 
    if (remainder != 0) 
     { 
     return gcf(remainder,num1); 
     } 
    return num1; 
} 

을 자신을 위해이 내 오류는 다음과 같습니다

w2.cpp: In function 'int main()': 
w2.cpp: 14: error: aggregate 'Fraction fraction' has incomplete type and cannot be defined 
w2.cpp: 23: error: 'enter' was not declared in this scope 
w2.cpp: At global scope: w2.cpp:35: error: function definition does not declare parameters 
w2.cpp: In function 'void display(int, int)': 
w2.cpp: 41: error: 'fraction' was not declared in this scope 

정말 긴 게시물에 대해 유감이지만 모든 도움이 크게 감사드립니다. 누군가 집에서나 강의 중 (언어 장벽으로 인해 내 교수를 충분히 이해할 수 없음)도 읽을 수있는 유용한 C++ 서적을 알려줄 수 있다면

+3

[The Definitive C++ Book Guide and List] (0120-555-9800) – ildjarn

+0

달콤한, 도서 목록을 가져 주셔서 감사합니다! – Umeed

+2

C++에서는 다른 함수를 사용하는 함수보다 먼저 사용해야합니다. main 앞에 다른 함수를 입력하십시오. 또한 앞으로 선언문을 사용할 수도 있지만이 시점에서 함수가 호출되는 함수보다 먼저 작성하는 것이 좋습니다. 또한 누락되었습니다. 라인 6에 – Topo

답변

3

다음을 살펴 보겠습니다.

error: aggregate 'Fraction fraction' has incomplete type and cannot be defined 

지금, main(), 당신은 struct Fraction fraction; 말했다. 이 시점에서 구조체를 앞으로 선언합니다. 완료되지 않았으므로 마치 사용할 수 없습니다.

전체 Fraction 구조체를 main() 전에 정의해야합니다. 또한 struct Fraction fraction;에서 struct이 필요하고,

error: 'enter' was not declared in this scope 

간단한 C.

에서 남은 있습니다. entry()이 위를 차지했지만 enter()을 사용하려고했습니다. 별로 말할 것도 없습니다.

At global scope: w2.cpp:35: error: function definition does not declare parameters 

이제 좀 더 혼란 스럽습니다. 이것은 잘못된 라인 :

struct Fraction fraction{ 

컴파일러는이 그것이 Fraction을 반환하는 기능이 있다는보고 어떻게하지만, 그것의 매개 변수 목록을 누락. 이 코드 블록으로 무엇을하려고하는지 정확히 모르겠습니다.

error: 'fraction' was not declared in this scope 

다른 곳에서 선언 된 개체를 사용하려는 것 같습니다. main()에서 원한다면, 인수로 전달해야합니다.당신이 전역 변수 fraction을 원하는 경우에, 당신은 글로벌 공간에 필요한 모든입니다

Fraction fraction; 

이것은 Fraction 구조체 이후에 발생한다. 또한이 개체 이름은 main()에있는 개체 이름과 동일하므로 main()에있는 개체 이름은이 개체를 음영 처리하며, main()에서 전역 개체 개체에 액세스하려면 ::fraction을 사용해야합니다.

일부 이해를 돕기를 바랍니다. 내가 볼

일부 다른 오류는 : 두 int의 소요 함수에 Fraction *을 전달하는

enter(&fraction); 

. 이 사람이 Fraction &을 갖고 싶어한다고 생각합니다. 그럼 그냥

simplify(&fraction); 

와 유사합니다.이 전달 된 객체를 수정하도록 enter (fraction);과 같이 호출 할 수 있지만 하나는 double 걸립니다. 나는 당신이 Fraction &을 가지고 가기를 원할 것이라고 생각합니다.

  • entrysimplify 함수는 정의되지 않지만 계속 사용하려고합니다.
  • display은 부분을 인쇄하려면 Fraction이되어야합니다.
+0

와우와 dirkgently 것들을 훨씬 더 명확하게. 이제 대부분의 오류가 사라지고 다른 기능을 수정해야합니다. 휴 나는이 하하를 강조했다. 하나의 질문은, 괜찮습니까? 만약 내가 이것을 출력한다면, 어떤 동급생을 위해서이 사본을 만들 수 있습니다. 왜냐하면 어떤 사람들은 저와 같은 배에 있다는 것을 알고 있기 때문입니다. – Umeed

3

A list of recommended books on C++.이 사이트 검색에 도움이됩니다.

C++에서 구조체 (또는 클래스)와 공용체는 두 가지 기본 유형의 사용자 정의 데이터 구조를 형성합니다. 사용자가 정의한 데이터 구조는 프로그램에서 사용하기를 원하는 실제 모델 또는 추상적 개념 인 모델/청사진입니다.

struct FriendName { 
    std::string first, last; 
}; // the semi-colon is required here 

firstlast이 구조체의 멤버 인 : 당신은 친구의 이름을 저장하는 구조를 원하는 경우에 따라서, 당신은 아마 같은 것을 할 것입니다. std::string은 이러한 멤버의 유형으로 컴파일러에게 저장하려는 데이터의 종류를 알려줍니다. 여기서 데이터는 라이브러리에서 정의한 적절한 유형을 사용하는 문자열입니다.

FriendName이라는 것을 정의하면 데이터를 저장하고이 데이터로 작업 할 수 있습니다. 그러나 FriendName을 다시 정의하려고하면 컴파일러에서 불평합니다. 귀하의 코드에서 어떤 일이 일어나고 있는지 확인하십시오.

이제이 데이터 구조를 사용하려면 특정 FriendName 인스턴스를 나타내는 메모리 영역 인 개체를 만들어야합니다.

FriendName fred; // note that I don't need to use struct FriendName 

당신은 가서로 사용할 수 있습니다 : : 다음과 같이 객체를 생성 할 수 있습니다

개체 이름이 . 운영자 및 회원과 함께 마커로 작동
fred.first = "Fred"; // write 'fred' object's first name 
fred.last = "Flintstone"; 

name을 사용하면 특정 구성원을 읽고 쓸 수 있습니다.

는 콘솔에서 이름에 읽고 싶었던 가정 :이 경우 당신이 할 것 :

이제
FriendName wilma; 
std::cin >> wilma.first >> wilma.last; // read in 'wilma' objects members one by one 

, 시작하기까지가 충분히있다!

+0

좋은 설명. 불행히도 데이터 구조와 관련이없는 많은 수의 오류가 있습니다. – chris

+0

@chris : 고마워! 나는 그들을 알아 차렸다. 그러나 나는 기본 C++에 대한 OP의 친숙하지 않은 익숙 함을 감안할 때 곧 이것들을 사용하기로 결정했다. 또한,이 숙제, 나는 그를 위해 파티를 망치고 싶지 않다 :) – dirkgently

+0

사실,하지만 솔직히 말해서 내가하고있는 일에 대한 생각이별로 없다. 불확실성을 없애고 이들 중 어느 것도 효과가없는 이유와 적절하게 사용하는 방법을 알게되었습니다. 이 중 일부는 자신이하고있는 일을 모르고 나중에 나 빠지게되는 길로 들어서는 경우 매우 혼란 스러울 수 있습니다. 나는이 오류를 일찍 설명하는 것이 왜 실제로 효과가 있었는지 (나중에 큰 문제를 일으킬 것임) 알지 못하고 코드를 수정하는 것보다 잘 시작하는 데 도움이된다고 생각합니다. – chris