C++에서 주 프로그램 뒤에 struct를 정의 할 수 있습니까? 함수를 정의 할 때 주 프로그램 앞에 함수를 선언 한 다음 주 함수 뒤에 함수 정의를 쓸 수 있습니다. 구조를 정의 할 때 이와 비슷한 것을 할 수 있는지 알고 싶었습니다. 고맙습니다.C++에서 main 함수 뒤에 struct를 정의 할 수 있습니까?
답변
C++에서 주 프로그램 뒤에 struct를 정의 할 수 있습니까?
나는 main
기능을 의미한다고 가정합니다. 예, main
함수 뒤에 클래스 (구조체 포함)를 정의 할 수 있습니다. 데모 :
int main(){}
struct S{};
우리는 함수를 정의
, 우리는 메인 프로그램하기 전에 함수를 선언 한 후 메인 프로그램 후 함수 정의를 작성할 수 있습니다. 구조를 정의 할 때 이와 비슷한 것을 할 수 있는지 알고 싶었습니다.
같은 것을 클래스에 적용하면 함수 앞에 선언 할 수 있고 이후에 정의 할 수 있습니다. 그러나 불완전한 (선언되었지만 정의되지 않은) 클래스의 사용은 매우 제한적입니다. 포인터와 포인터를 정의 할 수는 있지만 포인터를 만들거나 멤버 함수를 호출 할 수는 없습니다. 데모 :
struct S; // (forward) declaration of a class
S* factory(); // (forward) declaration of a function
int main(){
S* s = factory(); // OK, no definition required
// s->foo(); // not OK, S is incomplete
// S s2; // not OK
}
struct S{ // definition of a class
void foo(); // declaration of a member function
};
S* factory() {
static S s; // OK, S is complete
s.foo(); // OK, note how the member function can be called
// before it is defined, just like free functions
return &s;
}
void S::foo() {} // definition of a member function
편집 : @ user2079303 주석에서 언급 한대로 'forward declaration'이라는 용어를 잘못 사용했습니다. 그에 따라 내 대답을 업데이 트되었습니다.
구조체에 대한 포인터 만 저장하려는 경우 구조체를 전달 선언 할 수 있습니다. 그러나 일단 구조체가 정의되면 해당 포인터의 메소드 만 호출 할 수 있습니다.
#include <iostream>
// forward declaration of struct
struct S;
// pointer can be defined after forward declaration
S * s;
void workOnSPointer();
int main()
{
workOnSPointer();
}
// definition of struct
struct S
{
S() : bar(42) {}
void foo() { std::cout << "bar is " << bar << "\n"; }
int bar;
};
// methods can only be called after definition
void workOnSPointer()
{
S * s = new S();
s->foo();
delete s;
}
나중에 구조체 정의에서 구조체의 메소드를 전달 선언 할 수 있습니다.
#include <iostream>
// incomplete definition of struct S
// methods of the struct are only declared here
struct S
{
S();
void foo();
int bar;
};
int main()
{
S s;
s.foo();
}
// definition of the struct's methods
S::S() : bar(42) {}
void S::foo() { std::cout << "bar is " << bar << "\n"; }
전달 정의 된 메소드를 사용한이 정의는 헤더 (.h
) 파일의 주요 용도입니다. 헤더에 구조체를 정의하고 구조체가 사용되는 파일의 헤더를 포함 할 수 있습니다. 메소드의 정의는 소스 (.cpp
) 파일로 이동합니다. 코드에 적용이 의미 위 :
파일 S.h
struct S
{
S();
void foo();
int bar;
};
파일 S.cpp
#include "S.h"
#include <iostream>
S::S() : bar(42) {}
void S::foo() { std::cout << "bar is " << bar << "\n"; }
파일 main.cpp
#include "S.h"
int main()
{
S s;
s.foo();
}
당신이 S.cpp
및 main.cpp
하고 리 컴파일하는 경우 결과 객체 파일을 nk하면 처음부터 코드와 동일한 동작을 얻게됩니다.
@ user2079303이 맞으면 포인터를 정의하는 데 forward 선언을 사용할 수 있습니다. –
'struct'가 선언 된 또 다른 샘플 : http://coliru.stacked-crooked.com/a/8789088991c57916 –
'void main()'이 정확하지 않습니다.'int main()'이어야합니다. – mch
- 1. 왜 c에서 undefined struct를 사용할 수 있습니까?
- 2. C에서 Main()이라는 함수를 만들 수 있습니까?
- 3. main 메소드의 목적 코드 c에서 호출하는 함수
- 4. C에서 소켓을 통해 struct를 전송하십시오.
- 5. 함수 정의, C에서 .NET
- 6. main() 내부에서 함수 정의하기
- 7. VBA에서 함수 별칭을 정의 할 수 있습니까?
- 8. C에서 함수 매개 변수의 정렬을 제어 할 수 있습니까?
- 9. main()의 함수 유형
- 10. extern struct를 어떻게 선언합니까?
- 11. C에서 함수 인수로 char 및 int를 교환 할 수 있습니까?
- 12. C에서 extern struct를 함수로 전달하는 이유는 무엇입니까?
- 13. C에서 불변의 struct를 작성하는 가장 짧은 방법 #
- 14. C에서 객체 메소드를 에뮬레이트 할 수 있습니까?
- 15. "함수 선언"을 "함수 명령문"으로 정의 할 수 있습니까?
- 16. C : main 아래에 함수 정의 - 왜이 컴파일합니까?
- 17. C에서 유닉스 소켓을 통해 struct를 전송
- 18. C에서 여러 함수 정의, 프로토 타이핑
- 19. main() 함수 안에서 #include
- 20. 템플릿을 통해 main() 정의
- 21. C에서 struct를 생성하는 중 오류가 발생했습니다
- 22. C 프로그래밍 : struct를 매개 변수로 전달 - 함수
- 23. C에서 사용자 정의 함수 및 연결된 목록
- 24. C에서 어셈블리에 정의 된 변수에 액세스 할 수 있습니까?
- 25. Objective-C에서 클래스 속성을 정의 할 수 있습니까?
- 26. 객관적인 c에서 여러 값을 정의 할 수 있습니까?
- 27. ObjectView-C에서 UIView를 변수로 정의 할 수 있습니까?
- 28. 함수를 사용하지 않고 const struct를 초기화 할 수 있습니까?
- 29. main() 뒤에 정의 된 함수에 대한 함수 선언이없는 경우 컴파일러에서 오류가 발생하지 않습니다.
- 30. C에서 함수 인수의 함수
왜 시도하지 않습니까? – Netwave
네, 그렇게 할 수 있습니다. 조회 _forward 선언 _. –
http : //en.cppreference.com/w/cpp/language/class # Forward_declaration –