0

ヘッダー ファイルから .cpp ファイルの関数 clearConsole() にアクセスできない理由がわかりません。間違って呼び出していると思いますか? ヘッダー ファイルからメイン ファイルをターゲットにするにはどうすればよいですか? customer.h の addCustomer() 関数にユーザーが入力した後、clearConsole() 関数を呼び出そうとしました。

メイン.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();
    }
4

3 に答える 3

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()
    {
    }
}
于 2012-05-14T13:33:37.337 に答える
0

C、C++、およびアセンブリで書いているカーネルにもこの問題がありました。フラグldを使用して共有変数と関数を許可するようにコマンドに指示することで、この問題を修正できました。-sharedgcc はリンカ、アセンブリ、c コンパイラ、および c++ コンパイラであるため、gcc では同じことを行うだけです。

于 2016-11-27T04:15:54.677 に答える
0

clearConsole() メソッドをヘッダー ファイルに移動し (実際には同意しない .header ファイルでの実装については議論されていないと思いますが、とにかく...)、次のように、システム メッセージを必要な特定のものに変更します。

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

void clearConsole(){
    #ifdef _WIN32
    system("cls");
    #else
    system("clear");
    #endif
}
于 2012-05-14T14:27:28.493 に答える