Моя цель разработать базу данных для Заказчика, поэтому я начал создавать Datbase.h, Database.cpp и классический main.cpp. Когда я запускаю, я получил следующую ошибку:
«AddCustomer» не был объявлен для этой области
В Database.cpp вы найдете только пример. Я убежден, что в классе что-то не работает, но я не знаю. Где по вашему ошибка? Большое спасибо, я схожу с ума
main.cpp
#include <iostream>
#include <string>
#include <fstream>
#include <cstdio>
using namespace std;
#include "Database.cpp"
int main()
{
int choice;
//creating a menu for Database
cout<<"\t1. Add new customer"<<endl;
cout<<"\t2. Search Database for Customer"<<endl;
cout<<"\t3. Clear File"<<endl;
cout<<"\t4. Edit File "<<endl;
cout<<"\t5. Exit Program"<<endl;
cin>>choice;
switch (choice){
case 1:
AddCustomer();
break;
case 2:
break;
//...
}
}
База данных.cpp
#include "Database.h"
using namespace std;
Database::Database(){
}
void Datbase::AddCustomer(){
cout<< "It works"<<endl //it's an example
}
void Datbase:: searchname(){
}
void Datbase:: searchmail(){
}
void Datbase:: searchcell(){
}
void Datbase:: quit(){
}
void Datbase:: displayall(){
}
void Datbase:: search(){
}
void Datbase:: deleteFile(){
}
void Datbase:: editFile(){
}
База данных.h
#ifndef DATABASE_H_INCLUDED
#define DATABASE_H_INCLUDED
#endif // DATABASE_H_INCLUDED
class Database
{
public:
Database();
void AddCustomer();
void searchname();
void searchemail();
void searchcell();
void quit();
void displayall();
void search();
void deleteFile();
void editFile();
};
Итак, в main.cpp я могу изменить «Database.cpp» на «Database.h»?
Кроме того, AddCustomer
— это метод, вам нужно создать объект Database
, чтобы иметь возможность вызывать его.
не могли бы вы привести практический пример? Это мой первый раз, когда я использую oop
Ошибка связана с тем, что вы использовали AddCustomer() в случае оператора switch, который компилятор ожидает быть доступным в глобальной области видимости, поэтому не может его найти.
Поскольку это функция-член класса базы данных, вам потребуется получить к ней доступ через объект. Например.
int main()
{
int choice;
Database db;
cin>>choice;
switch (choice){
case 1:
db.AddCustomer();
break;
case 2:
break;
//...
}
}
Также вы должны включить заголовок, а не файл cpp напрямую.
И, если вы хотите использовать его без объявления объекта (хотя, похоже, это не ваш случай), вы можете сделать функцию-член статической для класса, а затем получить доступ как
Database::AddCustomer()
Да, потому что вы можете получить доступ к функции, используя экземпляр класса базы данных.
Кроме того, когда компилятор говорит, что не находит что-то в «области», вы должны сначала посмотреть, является ли это функцией-членом, а затем получить доступ с использованием объекта; хотя это может быть и из-за простых опечаток, например, отсутствия точки с запятой, тогда компилятор не сможет идентифицировать следующее определение функции. То же самое относится и к переменным (хотя глобальные переменные следует использовать, когда вы точно знаете, что так будет лучше, в больших проектах обычно не будет глобальных переменных)
Я не могу понять, как решить проблему. Я включил "Database.h" вверху основного и после...
Добавьте // создание объекта с именем 'db' класса Database ``` Database db; ``` затем получите доступ к AddCustomer следующим образом -> ``` db.AddCustomer(); ``` Это должно работать, если нужно, напишите мне в mobile.twitter.com/AdityaGupta150 Там вы также можете отправить изображение ошибки, хорошо, чтобы помочь :D
@MacUser Вы задали практический пример в комментариях, см. этот ``` class DataBase{ public: void AddRow(){ /*логика добавления строки*/ } } int main(){ DataBase mydata; мои данные.AddRow(); } Вот как вы получаете доступ к member function
, функциям, определенным внутри класса/структуры, также это называется «оператор точки», если вы хотите увидеть больше, вы можете найти это
Значит, я должен скопировать то, что я написал в Database.h, вверху основного?
Не нужно, так тоже должно работать. Поскольку на самом деле #include просто копирует содержимое Database.h поверх файла main.cpp.
@MacUser Вы решили проблему?
Нет, не пробовал, но ищу решение по вашим советам
Подождите, как вы его компилируете? Вам нужно скомпилировать как main.cpp, так и Database.cpp одновременно, иначе он покажет «связанную ошибку», подобную этой (неопределенная ссылка на...)
Сборка: отладка в DataCustomer (компилятор: компилятор GNU GCC) ----------------
Вот что возвращает CodeBlocks
Один из них может помочь, видите ли, я думаю, что вы may
делаете неправильно с несколькими файлами в кодовом блоке youtube.com/watch?v=qR2aS6t9-8k youtube.com/watch?v=rpipDcG8GMg Один для C код, но ваш код будет нормально работать с ним
Теперь я получаю эту ошибку: оператор не может разрешить адрес перегруженной функции
Это тогда другое, чем тема здесь на самом деле. Но вы можете получить такую ошибку, если вы использовали шаблоны ИЛИ, возможно, вы просто вызвали функцию с другим аргументом, например, вызов AddCustomer(4), в то время как AddCustomer определен таким образом, что не требует аргумента, поэтому вам может потребоваться изменить определение in this case
в AddCustomer(int) и т.д. *Примечание -> Сообщения об ошибках зависят от компиляторов
Вы это поняли? Если нет, вы можете просто не принять мой ответ, на вопрос может ответить кто-то другой: D
вы не должны включать исходный файл. Вместо этого включите заголовок, а затем свяжите скомпилированные источники