0

我不知道为什么我不能从头文件中的 .cpp 文件中访问函数 clearConsole(),我想我说错了吗?如何从头文件定位主文件?在用户输入 customer.h 中的 addCustomer() 函数后,我尝试调用 clearConsole() 函数。

主文件

// 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
}

客户.h

//customer.H
//The object class customer

   class customer
    {
    //...
    clearConsole();
    }
4

3 回答 3

4

如果您的文件链接在一起,则函数的前向声明就足够了。

客户.h

//customer.H
//The object class customer

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

class customer
{

//....

};

但是这个结构看起来是错误的。我将在 a 内的不同标头中声明该函数namespace,并在相应的实现文件中定义它:

清除控制台.h

namespace ConsoleUtils
{
    void clearConsole();
}

清除控制台.cpp

namespace ConsoleUtils
{
    void clearConsole()
    {
    }
}
于 2012-05-14T13:33:37.337 回答
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 回答
0

我在用 C、C++ 和汇编编写的内核中也遇到了这个问题。我可以通过使用标志告诉ld命令允许共享变量和函数来解决这个问题。-shared在 gcc 中你会做同样的事情,因为 gcc 是一个链接器、程序集、c 编译器和一个 c++ 编译器。

于 2016-11-27T04:15:54.677 回答