2011-04-30 4 views
1

나는 훈련 연습을하고 있으며 시작하는 데 문제가 있습니다. 배열 데이터 구조에 대한 프로그램을 작성해야합니다. 테스트 하네스가 제공되며 데이터 구조에 대한 코드를 구현해야합니다. 나는 헤더 파일에 배열을 정의하는 방법을 잘 모르겠습니다헤더 파일의 C++ 배열

우는 소리입니다 내가 헤더 파일에

#include <fstream> 
#include <iostream> 
using namespace std; 


// ***************************** 
// you need to create this class 
// ***************************** 
#include "ArrayIntStorage.h" 


int main(int argc, char **argv) { 
// *********************************** 
// non-sort read & then sort using std 
// *********************************** 
ifstream fin1("ACW2_data.txt"); 
ofstream out1("1-arrayUnsortedRead.txt"); 
//ofstream out2("2-arrayUnsortedRead-thenSTDSort.txt"); 

if(!fin1.is_open()) 
{ 
    cout << "FAIL" << endl; 
    return 1; 
} 

ArrayIntStorage arrayStorage1; 
arrayStorage1.setReadSort(false); // do not read sort 

// read in int values into data structure 
fin1 >> arrayStorage1; 

// output int values in data structure to file 
out1 << arrayStorage1; 

// sort data structure using std 
arrayStorage1.sortStd(); 

// output int values in data structure to file 
out2 << arrayStorage1; 

fin1.close(); 
out1.close(); 
out2.close(); 

정보를 편집 할 수있는 방법이 주요 함께 사용하기 위해 테스트 환경을 MAIN.CPP 파일은 많은 아래와 같이해야

+1

이것은 비현실적인 운동입니다. 'ArrayIntStorage' 클래스의 헤더 파일과 문서가 제공되어야합니다. 저는이 게으른 오만한 영혼이이 운동을 시작한 곳으로 큰소리로 그리고 격렬하게 불평 할 것입니다. –

답변

2

나는 당신이 ArrayIntStorage.h 헤더를 생성하고 일치 ArrayIntStorage.cpp을 구현 해야하는 확신 해요.

std :: vector와 같은 적절한 stl 컨테이너에 래퍼를 사용하고 작성해야하는 "std를 사용하는 데이터 정렬 구조체"주석을 기반으로합니다.

"// 정렬하지 않음"주석에 따라 기본적으로 각 삽입 후에 벡터를 정렬해야합니다 (물론 누군가가 래퍼에서 setReadSort (false)를 호출하지 않는 한).

위에서 설명한 인터페이스 외에도 >> 및 < <을 구현해야합니다.

업데이트.

에 대한 지원 >> 및 < <하는 연산자를 추가,

우선 첫번째 ... 당신이 모든에 의해 매우 혼란 것으로 보인다 C++ pass variable from .cpp to header file에 의문을 제기 읽기 :

이러한 연산자를 선언하여이 작업을 수행 할 당신의 .H 파일 :

:

friend std::ostream& operator<<(std::ostream &out, const ArrayIntStorage &a); 

friend std::ifstream & operator>>(std::ifstream &, ArrayIntStorage &); 

당신은 다음 .cpp 파일에서 구현을 정의

분명히 여기에 적절한 코드를 추가해야합니다. 이것은 컴파일하는 것입니다. 몇 가지 일반적인 정보를 원하시면 지금

#include <fstream> 
#include <iostream> 

: 은 여전히 ​​당신이 당신의 .H 파일의 스트림 헤더를 포함이 있는지 확인, 컴파일되지 않는 경우

어레이 스토리지는 표준 같은 것을 기반으로해야

::벡터. >> 및 < < 함수의 목적은 해당 컨테이너에서 int를 추가 및 검색하는 것입니다.

ArrayIntStorage는 클래스이므로 필요한 인터페이스 (.h 파일의 공용 멤버 함수)를 설정하면 .h 및 .cpp 만 살펴보고 구현을 완성해야합니다.

일단 완료되면 다른 질문에 대한 대답에 "extern"광기가 필요하지 않습니다. 주요 기능을 살펴보십시오. If는 클래스의 객체와 fin1 스트림을 만듭니다. 그런 다음 구현 한 >> 연산자를 호출합니다. 이 모든 작업은 지역 변수를 사용하여 수행됩니다.

"main.cpp에서이 변수 값을 사용하는 방법"입니다. 해당 변수를 매개 변수로 사용하여 클래스의 멤버 함수를 호출합니다.

마지막으로 헤더 파일 및 링크 오류를 이해하는 데 이러한 모든 문제가있는 경우 적절한 교육을 시작 했습니까? (나는 내 ​​댓글에 언급 된)

+0

헤더 파일을 만들어야한다는 것을 알고 있지만, 일치하는 cpp 파일을 만드는 것에 대해 아무 것도 들었습니다. 마지막 점은 헤더 파일을 << and >> 연산자로 만들었을 때 오류가 발생합니다. 나는이 줄'std :: ostream & operator << (ostream & out, const ArrayIntStorage & a)'와 비슷한 줄을 >>에 넣으려고했다. 이것들은 내 헤더 파일에 "LNK"링커 에러를 주었다. – Marc

+0

감사합니다! 나는 이제 다른 연습을 해보고 더 많이 이해했다. – Marc

2

헤더 파일 ArrayIntStorage 하셔

메르을 감상 할 수있다 : -

함수 시그나를 진짜야은 용도에 따라 변경 될 수 있습니다 : -

// ArrayIntStorage.h - header file 

class ArrayIntStorage 
{ 

    public : 

    ArrayIntStorage(); // this is the constructor 
         // You may skip this constructor, and use the default one 

    void setReadSort(bool bSort); 
    void sortStd() 

    // Add any public members if needed 

    private : 

    // Add any private members/ functions if needed 

} 
+0

좋아, 나는 전에 그런 것을 가지고 있었다. 그러나 couldnt는 그것이 일하기 위해 알아 듣는다. 메신저 꽤 확실 해요 지금은 기본 생성자를 사용해야하지만 다른 것들은 나중에 내 자신을 만들어야 만합니다. 전에 C++에서 많은 것을 프로그래밍하지 않았고 헤더 파일이 무엇인지 이해하지 못했습니다. 헤더 파일로 무엇을 할 수 있습니까? 다른 사람이 내가 일치하는 cpp 파일이 필요하다고 말했다. – Marc

+0

그리고 위에서 언급 한 인터페이스 외에도 >> 및 <<을 구현해야한다. IBM의 [오버로딩 연산자에 대한 기사 (C++에만 해당)] (http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fcplr318) .htm)는 나에게 꽤 좋은 소개처럼 보입니다. http://www.cplusplus.com은 매우 우수한 (고품질의) 리소스입니다. 그리고 그들은 튜토리얼 세트도 괜찮습니다 (불완전하더라도). – corlettk

1

마크,

http://www.cplusplus.com/doc/tutorial/는 우리를 실망있다. 그들은 자신의 권리로 화제로 헤더 파일을 dicuss하지 않는다 ... 그러나 http://www.learncpp.com/cpp-tutorial/19-header-files/ 않습니다.

기본적으로 헤더 파일은 클래스의 "인터페이스"를 정의합니다. 클래스의 사용자가이 "인터페이스 정의"를 코드에 포함시킬 수 있도록 별도의 파일에 넣습니다. 예를 들어 #include "ArrayIntStorage.h"과 같습니다. 이것은 컴파일러가 잘못 된 메소드 이름이나 잘못된 타입의 매개 변수를 전달하는 것과 같은 잘못된 것이 있는지 판별 할 수있게합니다 ... 아시다시피, 당신이 본 모든 컴파일러 오류 ... 예?

그래서 클래스가 .h 파일에서 수행하는 작업을 정의한 다음 .cpp 파일에서 어떻게 정의하는지 정의합니다.

의미가 있습니까?

건배. 키이스.

+0

매우 도움이됩니다. 감사합니다. 나는 헤더 파일이 단지'#include '할 곳에 복사된다는 것을 깨닫지 못했다. – Marc

관련 문제