2012-11-20 3 views
2

정말 바보 같은 경우 사과드립니다.하지만이 작업을 수행하는 방법을 알 수 없습니다.C#에서 클래스의 메서드 호출하기

나는 C#으로 여러 해 동안 프로그래밍 해왔다. 오늘은 C++을 처음 시도하고 Windows 용 Qt를 설치하려고 생각했습니다.

Project Euler 문제의 결과를 출력하는 콘솔 응용 프로그램을 작성하려고합니다.

cout을 통해 콘솔에 문자열 값을 출력하도록 관리 했으므로 C#에서와 마찬가지로 클래스를 만들고 정적 메서드로 문제를 해결할 수 있다고 생각했지만 어떻게 호출해야 하는지를 알 수 없습니다. 내가 만든 수업. 그리고 1 시간이 넘는 웹 검색으로 지금까지 아무런 도움이되지 않았습니다.

나는이 :

#include <iostream> 
using namespace std; 

void main() 
{ 
    problems p = new problems(); 

    std::cout << "Hello" << "\n"; 
} 

절대적으로 작동하지 않는다. I 클래스에 대한 액세스 권한을 부여하는 몇 가지 using 또는 include 문을 필요로하기 때문에 나는 ... 생각

클래스 헤더 :

#ifndef PROBLEMS_H 
#define PROBLEMS_H 

class problems 
{ 
public: 
    static long problem1(); 
}; 

#endif // PROBLEMS_H 

및 클래스 CPP :

long problems::problem1() 
{ 
     long output = 0; 

     for (int i = 1; i < 1000; i++) 
      if (i % 3 == 0 || i % 5 == 0) 
       output += i; 

     return output; 
} 

나는하지 않는다 클래스 선언의 모든 오류, 그래서 그게 정확해야 할 것 같아요 (하지만 난 물론 모르겠다 ...). 궁극적으로 "Hello"대신 problem1()의 출력을 인쇄하고 싶습니다. main() 이 작업을 수행하려면 어떻게해야합니까?

답변

2

편집 problems::problem1 메서드가 정적 인 원래 질문에 대한 대답입니다.

당신은 호출하는 정적 메소드 인스턴스를 필요가 없습니다 : 비 정적 메서드에 대한

#include <iostream> 
#include "header_with_problems_declaration.h"  

void main() 
{ 

    std::cout << problems::problem1() << "\n"; 
} 

을, 당신은 더 동적 할당이 없었 것을

#include <iostream> 
#include "header_with_problems_declaration.h"  

void main() 
{ 
    problems p 
    std::cout << p.problem1() << "\n"; 
} 

주 같은 것을 할 것 new. 이 경우에는 그렇게 할 이유가없는 것 같습니다.

관련 머리글을 포함하고 구현을 컴파일 한 다음 주 헤더에 링크해야합니다. 이렇게하는 방법은 빌드 시스템에 따라 다릅니다. 정적 방법은 정말 클래스에 관련되지 않는

는 C++에서 대신 네임 스페이스 내에서 비 ​​멤버 함수를 넣어 것 :

namespace problems 
{ 
    long problem1() { ..... } 
} 
+0

감사합니다. 죄송합니다. 메소드를 정적으로 변경 한 후 수정하는 것을 잊어 버렸습니다. C#에서도 마찬가지입니다. 그러나 이것은 효과가 없습니다. –

+0

@ user643192 어떻게 작동하지 않습니까? BTW에서는 main에'problems' 클래스 선언과 함께 include가 빠져 있습니다. – juanchopanza

+0

아, 포함에 따옴표가 필요했습니다! 감사합니다. iostream include와 같이 <>를 사용하고있었습니다. 이제 작동합니다. –

1

위해서는를 포함 할 수 있습니다.H 파일 및 #include 필요한 클래스에 액세스 할 수 있도록 :

#include "problems.h" 
당신이 포인터를 통해 방법을 접근 할 필요가 있으므로 새로운 포인터를 생성

:

problems *p = new problems(); 
long x = p->problem1(); 

당신은 또한 다음과 같이 액세스 할 수 있습니다 :

problems p = problems(); 
long x = p.problem1(); 
+0

포함 부분이 맞지만 메서드가 정적이어서 나머지 부분이 잘못되었습니다. – juanchopanza

+0

@juanchopanza 수정 된 질문을 살펴보십시오. 사실은 아니야 –

+0

좋아, 내 downvote를 제거했습니다. 질문의 의미가 크게 바뀌 었습니다! – juanchopanza

관련 문제