C++ c++;类别->;向量->;文件

C++ c++;类别->;向量->;文件,c++,vector,C++,Vector,我有这个要求 我正在尝试创建一个简单的数据库模式,与我在这里看到的略有不同。我有一个类文件(client.h)及其实现(client.cpp): 但我明白了 ../src/company.cpp:49:2:错误:“客户端”未在此范围内声明 客户。推回(c) 那么,如何实现这一点呢?正如Morgan在评论中提到的,当您试图在实现文件中定义成员函数,但忘记将类名添加为前缀时,通常会出现这个问题(例如,void add_client(){}而不是void Company::add_client(){}

我有这个要求

我正在尝试创建一个简单的数据库模式,与我在这里看到的略有不同。我有一个类文件(client.h)及其实现(client.cpp):

但我明白了 ../src/company.cpp:49:2:错误:“客户端”未在此范围内声明 客户。推回(c)


那么,如何实现这一点呢?

正如Morgan在评论中提到的,当您试图在实现文件中定义成员函数,但忘记将类名添加为前缀时,通常会出现这个问题(例如,
void add_client(){}
而不是
void Company::add_client(){}


这个错误很常见,很容易被忽略,因为在文件中定义一个名为
add\u client
的新的免费函数是完全合法的,这与
Company
类无关。这就是为什么编译器只在您尝试访问数据成员时才抱怨,而不是在之前。

您的问题描述是正确的不清楚,是否出现编译器错误?尝试访问
Company::print_clients()中的
clients
向量时会出现什么错误
例如?请提供尝试访问向量的Company类的成员函数的实现代码。您确定没有忘记将Company::作为前缀添加到Company.cpp中的函数名称中?谢谢Merlind!
#ifndef CLIENT_H_
#define CLIENT_H_
#include <iostream>
using namespace std;
class Client {
public:
    // constructors
    Client();
    Client(string new_name, string new_tel, string new_addr);
    // getters
    string getName();
    string getAddr();
    string getTel();
    // setters
    void setName(string);
    void setAddr(string);
    void setTel(string);
    void display();
    void input();
private:
    // fields
    string name;
    string addr;
    string tel;
};
#endif /* CLIENT_H_ */

/*
 *ad client.cpp
 *
 *  Created on: Jan 12, 2017
 *      Author: niksarid
 */

#include <iostream>
#include "client.h"
using namespace std;

Client::Client() {
    setName("");
    setAddr("");
    setTel("");
}

Client::Client(std::string new_name, std::string new_addr, std::string     new_tel) {
    setName(new_name);
    setAddr(new_addr);
    setTel(new_tel);
}

string Client::getName() {
    return name;
}

string Client::getAddr() {
    return addr;
}

string Client::getTel() {
    return tel;
}

void Client::setName(string p_name) {
    name = p_name;
}

void Client::setAddr(string p_addr) {
    addr = p_addr;
}

void Client::setTel(string p_tel) {
    tel = p_tel;
}

void Client::input() {
    string tmp;

    cout << "INPUT CLIENT INFO" << endl;
    cout << "Name: ";
    cin >> tmp;
    setName(tmp);
    cout << "Address: ";
    cin >> tmp;
    setAddr(tmp);
    cout  << "Telephone: ";
    cin >> tmp;
    setTel(tmp);
}

void Client::display() {
    cout << name << "\t" << addr << "\t" << tel << endl;
}
class Company {
public:
    Company();
    ~Company();
    void add_client();
    void print_clients();
    void loadClientsFromFile();
    void saveClientsToFile();
private:
    vector<Client> clients;
} cmp;
#endif /* COMPANY_H_ */
void add_client() {
    Client c;

    c.input();
    clients.push_back(c);
}