标识符"客户菜单"未定义

identifier "customerMenu" is undefined

本文关键字:未定义 菜单 客户 标识符      更新时间:2023-10-16

我目前正在编程一个赋值,而且我对C++基本上是新手。不过,我确实理解,在使用函数之前,您需要定义一个函数,或者在.cpp文件中使用函数之前使用头文件来原型化这些函数。

然而,执行这两种操作中的任何一种都仍然会抛出方法未定义的错误。

这是我凌乱的头文件。。。

#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)。

如果您发布了错误消息的文本,会有所帮助,但问题似乎是您在一个名为Driver的类中定义了函数,但主函数中没有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);
    }
}
函数customerMenu不是一个独立的函数,它是Driver类的一个成员。这意味着您首先需要一个Driver对象实例,然后调用上的函数
Driver myDriver;
myDriver.customerMenu(customers);

如果你不明白为什么你需要这个,我想你可能想回到一些基本的教程。


作为一个额外的提示:在基本知识之后,您可能想了解如何通过引用传递参数。因为现在您正在通过值传递customers向量,这意味着它将为您进行的每个函数调用复制。这也意味着每个函数都有自己的副本,并且将对此私有副本进行修改,而不是作为参数传入的向量。