2013-11-28 15 views
2

Я программирую назначение в настоящее время, и я в основном новичок в C++. Я понимаю, что вам нужно определить функцию, прежде чем вы сможете ее использовать, или использовать файл заголовка для прототипа функций перед их использованием в файле .cpp.идентификатор «customerMenu» не определен

Однако выполнение любой из этих операций по-прежнему вызывает ошибку, что методы не определены.

Это мой грязный заголовочный файл ...

#ifndef DRIVER_H 
#define DRIVER_H 
#include "Account.h" 
#include <vector> 
#include <iostream> 
#pragma once 

using namespace std; 

class Driver { 

private: 

public: 
void prevAccount(vector<Customer> customers); 
void nextAccount(vector<Customer> customers); 
void accountActions(vector<Customer> customers); 
void listCustomerAccounts(vector<Customer> customers); 
void selectAccount(vector<Customer> customers); 
void createAccount(vector<Customer> customers); 
void prevCustomer(vector<Customer> customers); 
void nextCustomer(vector<Customer> customers); 
void customerActions(vector<Customer> customers); 
void listCustomers(vector<Customer> customers); 
void selectCustomer(vector<Customer> customers); 
void createCustomer(vector<Customer> customers); 
void customerMenu(vector<Customer> customers); 
void main(); 
}; 

#endif 

А вот файл .cpp для драйвера, который по существу запускает программу ...

#include "Account.h" 
#include "Customer.h" 
#include "Driver.h" 
#include "JuniorCurrentAccount.h" 
#include "CorporateSavingsAccount.h" 
#include "StudentSavingsAccount.h" 
#include "CurrentAccount.h" 
#include "Transaction.h" 
#include <stdlib.h> 
#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 

static int customerIndex = 0; 
static int accountIndex = 0; 
static int accNum = 1; 


//tier 5 
void Driver::accountActions(vector<Customer> customers) { //code } 
void Driver::prevAccount(vector<Customer> customers) { //code } 

//tier 4 
void Driver::createAccount(vector<Customer> customers) { //code } 
void Driver::selectAccount(vector<Customer> customers) { //code } 
void Driver::listCustomerAccounts(vector<Customer> customers) { //code } 

//tier 3 
void Driver::customerActions(vector<Customer> customers) { //code } 
void Driver::nextCustomer(vector<Customer> customers) { //code } 
void Driver::prevCustomer(vector<Customer> customers) { //code } 

// tier 2 
void Driver::createCustomer(vector<Customer> customers) { //code } 
void Driver::selectCustomer(vector<Customer> customers) { //code } 
void Driver::listCustomers(vector<Customer> customers) { //code } 

//tier 1 
void Driver::customerMenu(vector<Customer> customers) { //code } 

void main() 
{ 
vector<Customer> customers; 

cout << "________________________" << endl; 
cout << "//MAIN MENU " << endl; 
cout << "||Customers (1) " << endl;  
cout << "||"; 

int mainMenuChoice; 
cin >> mainMenuChoice; 

if (mainMenuChoice == 1) 
{ 
    customerMenu(customers); 
} 
} 

Очень Дно .cpp-файл, где ошибка вызывает жалобы, действительно не понимая, почему эта ошибка появляется, поскольку я думаю, что я рассмотрел определения.

Я извлек код из тел метода, чтобы сэкономить место, но они по существу выполняют функцию ИЛИ вызывают метод более высокого уровня (1 вызов 2, 2 вызова 3).

ответ

3

Это поможет, если вы разместили текст сообщения об ошибке, но проблема в том, что вы определили свои функции в классе Driver, но в своей основной функции нет объекта драйвера.

Попробуйте

int main() 
{ 
    Driver driver; 
    vector<Customer> customers; 

    cout << "________________________" << endl; 
    cout << "//MAIN MENU " << endl; 
    cout << "||Customers (1) " << endl;  
    cout << "||"; 

    int mainMenuChoice; 
    cin >> mainMenuChoice; 

    if (mainMenuChoice == 1) 
    { 
     driver.customerMenu(customers); 
    } 
} 
+0

Это имеет смысл, я предположил, что Драйвер автоматически будет считаться основным классом и, следовательно, его не нужно будет инициализировать (как в Java), но я не знал, что мне нужно его специально инициализировать. Благодаря! – Azzah

2

Функция customerMenu не является самостоятельной функцией, она является членом класса Driver. Это означает, что вам нужно экземпляр в Driver объект первым, что вы вызываете функцию:

Driver myDriver; 
myDriver.customerMenu(customers); 

Если вы не понимаете, почему вам это нужно, я думаю, что вы, возможно, захотите вернуться к некоторым основным учебник.


В качестве дополнительного наконечника: После того, как основы, вы можете узнать о том, как передать аргументы по ссылке. Потому что прямо сейчас вы передаете customers вектор по значению, что означает, что оно копируется для каждого вызванного вами функционального вызова. Это также означает, что каждая функция имеет свою собственную копию, и изменения будут сделаны на этой частной копии, а не на векторе, переданном в качестве аргумента.

+0

Я предполагала, компилятор поймет Driver.cpp как мой основной класс, но явно не так. Я даже не закончил никаких основных уроков, я делаю это программирование на основе моих знаний о Java. Мы только что были брошены в глубокий конец, поэтому я делаю все, что могу. А что касается ссылок и указателей, я собираюсь сначала начать базовую реализацию, а затем правильно узнать об этом. Спасибо за ответ, хотя, имеет смысл сейчас! – Azzah

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