2012-05-14 2 views
0

Я не знаю, почему я не могу получить доступ к функции clearConsole() из моего .cpp-файла из файлов заголовков, я думаю, что я называю это неправильным? Как настроить целевой файл из файла заголовка? Я пытаюсь вызвать функцию clearConsole() после ввода пользователя в functinon addCustomer() в customer.h.Не удается получить доступ к функции из основного файла из файла заголовка 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

@ Ник нет - см. Ответ. –

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++.

Смежные вопросы