Определение функции-члена вне класса - PullRequest
0 голосов
/ 02 июня 2018

Во-первых, я даю коды.Затем я объясняю проблему, с которой сталкиваюсь.

main.cpp

#include <iostream>
#include "acc.h"

using namespace std;
class mem;
int main()
{
    show();
    return 0;
}

acc.h

#ifndef ACC_H
#define ACC_H

#include "acc.cpp"
void show();

class mem{
    int a;
public:
    void showa();
    void seta(int A);
};
#endif

acc.cpp

#include <iostream>
using namespace std;

void mem::showa(){cout<<a<<endl;}
void mem::seta(int A){a = A;}

void show()
{
    mem m;
    m.seta(22);
    string ss;
    cin>>ss;
    cout<<"MY name is "<<ss<<" ";
    m.showa();
}

Класс "mem" Я уже объявил в файле "acc.h" и добавил этот "acc.h" в файл acc.cpp.Но когда я вызываю этот класс из функции.Это не может ответить.Отображение "a" и "mem" не объявлено.Как я могу идеально связать это определение класса и функции-члены этого класса, чтобы вызов функций-членов этого класса из другой функции не мог создать никаких проблем?

1 Ответ

0 голосов
/ 02 июня 2018

Если вы удалите #include "acc.cpp" из файла acc.h, он должен скомпилироваться без ошибок.Я пытался, и это компилируется для меня.Я использую Visual Studio 2010 для того же.

Кроме этого, еще несколько комментариев:

  1. Вы можете использовать #pragma once в вашем заголовочном файле вместо #ifndef/#define макросов.Первый более понятен.
  2. Вам не нужно пересылать объявление class mem до main(), поскольку вы уже включаете acc.h.
  3. , show() можно переместить туда, куда main() определяется с помощью файлов acc.h/acc.cpp, выделенных для класса mem.
  4. Файл заголовка всегда должен называться в соответствии с классом, который он содержит, т.е. mem.h/mem.cpp в вашем случае.Он сообщает, какой файл содержит какой класс, даже не открывая файл.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...