문제

나는 .txt의 일부를 얻은 다음 정수로 변환 한 다음 변수로 저장할 수 있지만 단일 선언에서이를 가능하게한다는 것을 알고 있습니다. (변수는 글로벌이어야합니다).

즉:

[data.txt]
1020
[convert_data.cpp]
#include<fstream>
fstream convert("data.txt");
//way to declare something equal to A PARTICULAR POINT in data.txt

int main()
{
    //how would I take this block of code and simplify it to two DECLARATIONS (not
    //function calls), or, if that's not possible or not practical, how would I make
    //n and m (or var1 and var2) global AND CONSTANT?
    char var1[5];
    convert.getline(var1,2);
    char var2[5];
    convert.getline(var2,2);
    const int n=atoi(var1);
    const int m=atoi(var2);
    return 0;
}
도움이 되었습니까?

해결책

아니요, 단일 선언에서는 할 수 없습니다. 이를 위해 함수를 작성할 수 있으며 해당 기능으로 로컬 변수를 초기화 할 수 있지만 전역 변수를 초기화 할 수는 없습니다. 글로벌 변수를 초기화하려면 프로그램의 초기화 루틴 중에 명시 적으로 그렇게하거나 글로벌 객체의 생성자 (권장되지 않음)에서 수행 할 수 있습니다.

다른 팁

컴파일러의 관점에서 끊임없는 컴파일 시간에 고정 된 값이있는 것입니다. 텍스트 파일에서 데이터를 읽고 (프로그램이 컴파일 된 후에 변경할 수 있음) 텍스트 파일에서 읽은 숫자는 프로그램에서 상수가 될 수 없습니다.

당신은 그렇게 말했습니다 ~할 수 있었다 다음과 같이하십시오 :

class ConstInteger {
public:
    ConstInteger(fstream &f) {
        char s[5];
        f.getline(s,2);
        value = atoi(s);
    }
    public operator int() const { return value; }
private:
    int value;
};

fstream convert("data.txt");
ConstInteger n(convert);

위의 내용은 C ++ 컴파일러가 글로벌 클래스를 위해 수행하는 초기화에 의존합니다. 결과적으로, 당신은 클래스 초기화 순서와 관련하여 C ++ 컴파일러의 자비에 주로 있습니다. 또한,이 배열에서 오류 처리는 번거 롭을 수 있습니다. (예를 들어, 어떻게되는지 data.txt 존재하지 않는다?)

내가 올바르게 이해하면 텍스트 파일의 일부에서 읽고 값을 상수로 저장하고 싶습니까? 글쎄, 당신은 초기화되지 않은 상수를 가질 수 없으므로 런타임에 할당 할 글로벌 선언.

아마도 그렇게하는 방법은 Say GetConstant라는 글로벌 함수에서 가지고있는 기능을 캡슐화하는 것입니다. 여기에는 정적 변수가 포함될 수 있으며 GetConstant를 호출 할 수 있습니다. 파일에서 VAR이 읽은 지 확인합니다. 파일에서 읽지 않으면 상수. 게으른 평가. 물론 이것은 필요가 일정 해야하는 문제를 해결하지 못합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top