2012-11-20 60 views
2

道歉,如果這真的很愚蠢,但我只是不知道如何做到這一點。在C中調用類的方法#

我一直在C#編程的年齡。今天我想我會第一次嘗試一些C++,併爲Windows安裝Qt。

我想寫一個控制檯應用程序輸出項目歐拉問題的結果。

爲經由cout我認爲讓我們做一個類和有問題的靜態方法,就像我在C#中做管理,以輸出字符串值到控制檯...但我無法弄清楚如何調用我創建的課程。搜索網頁超過一個小時,迄今爲止沒有任何用處。

我:

#include <iostream> 
using namespace std; 

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

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

絕對不工作。我猜是因爲我需要一些usinginclude聲明給訪問類...

類的頭:

#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; 
} 

我不明白在類聲明中的任何錯誤,所以我想這一定是正確的(但我不知道當然...)。最終我想打印輸出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它不起作用?順便說一句,你錯過了在我們的主要包含'problems'類聲明。 – juanchopanza

+0

啊,我需要包括引號!謝謝,我正在使用<>作爲iostream包含。現在它可以工作。 –

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