2012-05-14 86 views
0

我不知道爲什麼我無法從頭文件中的.cpp文件中訪問clearConsole()函數,我想我錯了?我如何從頭文件定位主文件?我嘗試在customer.h中的addCustomer()functinon中輸入用戶後調用clearConsole()函數。無法從頭文件中的主文件訪問函數C++

Main.cpp的

// OTS.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <string> 
using namespace std; 

#include "customer.h" 

// Clear function specific to Windows 
// Cross platform alternatives are more convoluted to reach desired effect, so have not been included 
void clearConsole() 
{ 
    #ifdef _WIN32 
    system("cls"); 
    #endif 
} 

Customer.h

//customer.H 
//The object class customer 

    class customer 
    { 
    //... 
    clearConsole(); 
    } 
+3

爲什麼你在這個.h文件中放了很多代碼?更正常的是有一個.h和一個.cpp文件。 –

+0

你碰到什麼錯誤?它是編譯器錯誤還是鏈接器錯誤?你的文件是否駐留在同一個文件夾中?如果他們駐留在不同的路徑中,您是否將這些文件添加到項目中? – dirkgently

+0

我打算讓每個類都在一個獨立的頭文件中,然後菜單將位於.cpp中,並且所有內容都將從.cpp中調用。 – Nick

回答

4

如果你的文件鏈接在一起,功能預先聲明就足夠了。

Customer.h

//customer.H 
//The object class customer 

void clearConsole(); // <--- declare function 

class customer 
{ 

//.... 

}; 

但這種結構看起來是錯誤的。我想聲明的功能在不同的標題,namespace內,並在相應的實現文件中定義它:

clearconsole.h

namespace ConsoleUtils 
{ 
    void clearConsole(); 
} 

clearconsole.cpp

namespace ConsoleUtils 
{ 
    void clearConsole() 
    { 
    } 
} 
+0

非常感謝:)這是訪問和定義將在整個項目中使用的函數的最佳方式嗎? – Nick

+0

@Nick no - 查看答案。 –

0

把你的clearConsole()方法移動到頭文件中(我認爲並沒有討論在.header文件下我實際上不同意的實現,而是一個yway ...),並更改系統消息給你所需要的特定的一個,具體如下:

#ifndef _WIN32 
#include <syscall.h> 
#endif 

void clearConsole(){ 
    #ifdef _WIN32 
    system("cls"); 
    #else 
    system("clear"); 
    #endif 
} 
0

我也有我的內核這個問題,我在C,C++和彙編正在寫。通過告知ld命令允許使用-shared標誌共享變量和函數,我能夠解決此問題。在gcc中,你只需要做同樣的事情,因爲gcc是一個鏈接器,程序集,c編譯器和一個C++編譯器。