2015-11-14 49 views
-1

我知道這應該很容易,但我似乎無法把握它。我想要做的就是能夠在我的main.cpp文件中使用getUTC()函數。這顯然是錯誤的,但我在那裏展示了我正在嘗試做的事情。善良 - C++的新手。C++ - 正確的方法來添加功能,以單獨的文件

我的理解是建立一個項目的「正確」方法是在自己的文件中有獨立的「部分」代碼,就像我習慣的任何其他語言一樣,因爲您可以更輕鬆地查看/編輯路。因此,在這種情況下,mylib將成爲我在整個項目中使用的常用功能。在另一個頭文件/文件可能是我所有的文件處理,等等。

的main.cpp

#include <Windows.h> 

#include "mylib.h" 
using namespace mylib; 

mylib::getUTC(); 

mylib.h

#ifndef MYLIB_H 
#define MYLIB_H 

namespace mylib 
{ 
    void getUTC(); 
} 

#endif 

mylib.cpp

#include "mylib.h" 
#include <ctime> 

namespace mylib 
{ 
    void getUTC() { 
     time_t utcTime; 
     return time(&utcTime); 
    } 
} 

UPDATE編輯:

mylib.h

#ifndef MYLIB_H 
#define MYLIB_H 

namespace mylib 
{ 
    time_t getUTC(); 
} 

#endif 

mylib.cpp

#include "mylib.h" 
#include <ctime> 

namespace mylib 
{ 
    time_t getUTC() { 
     time_t utcTime; 
     return time(&utcTime); 
    } 

} 

然後在main.cpp中我可以這樣稱呼它mylib::getUTC()。這編譯和工作。你們其中一位提到擺脫namespace mylib,但因爲我會在這個文件中有不少功能,更不用說可能會在我的main.cpp中使用更多的頭文件/ cpp文件。我認爲這是一種很好的方式區分我的代碼/部分,除非有某些原因不應該這樣做?

此外,現在對我來說很明顯這是如何完成的...不知道爲什麼我會感到困惑。我在不同語言中擁有非常堅實的背景,而不是C++,所以當我開始使用代碼時,我主要關心的一個問題是確保我正在以「正確/正確」的方式進行操作,所以它不會讓我失望諸如使用多個頭文件/源文件的道路。

更多的更新:

我想也許它沒有工作,畢竟。編譯時得到這些錯誤:

Error C2086 'int mylib::time_t': redefinition mylib.cpp 
Error C2447 '{': missing function header (old-style formal list?) mylib.cpp 
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int mylib.cpp 
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int mylib.h 
Error C2143 syntax error: missing ';' before '{' mylib.cpp 
Error C2146 syntax error: missing ';' before identifier 'getUTC' mylib.cpp 
Error C2146 syntax error: missing ';' before identifier 'getUTC' mylib.h 
+1

爲什麼ü認爲這是錯的?你得到的錯誤是什麼? – Nandu

回答

1

你有基本的想法。基本上你可以將單獨的.cpp文件編譯到.o或目標文件中。然後,將所有的.o文件鏈接到一個可執行文件中。其中一個.cpp文件應該包含main函數。

我看到兩個問題與您的代碼:

  1. 你的main.cpp文件不包含一個主要功能。您可能想要將您的單行代碼放入主函數中。

  2. 你的功能是無效的,但你從它返回的東西。爲了從你的函數返回一些東西,它的聲明和定義都應該有一個返回類型。

+0

1 - 是的,我知道我沒有包括整個主文件這只是一個例子。 2 - 你能更具體嗎?那就是我不瞭解需要什麼 - 我想我只是在推翻整個事情。 – user756659

+0

得到了很多錯誤,它不會編譯。使用VS 2015。 – user756659

0

你所做的是可以的,但是你可以去掉使用的命名空間行,因爲你有完全限定的四個函數調用,把名字空間放在函數名前面。

你也可能想看看在使用類,這是C++的主要特徵之一。

而回頭看,你可能要改變返回類型的代碼你運行或者將無法編譯。

我不確定如果我誤解了你的意圖是你在main.cpp中編寫的,但是你不需要再次聲明這個函數,那麼你已經通過#include頭文件來完成。

相關問題