Я новичок в C++, и у меня есть трудности с моим проектом.Объявление и определение разделительной функции или удаление нового оператора в заголовке?
Super.h
#pragma once
#include <iostream>
float *list=new float[10];
class Super{
public:
void function(){}
};
хиджры
#pragma once
#include "Super.h"
class A{
public:
void function();
};
a.cpp
#include "A.h"
void A::function(){
std::cout<<"Working A!"<<std::endl;
}
main.cpp
#include "A.h"
int main(int argc, const char * argv[]) {
A a;
a.function();
return 0;
}
Этот код не компилируется (лязг: ошибка: команда линкер потерпела неудачу с кодом выхода 1 (использование -v, чтобы увидеть вызов)), и я нашел, если я удалю
float *list=new float[10];
в Super.h, он составлен.
Однако, мне нужен массив, который можно получить доступ в классе А. Таким образом, я перепробовал много способов, и нашел, что это может быть скомпилирован, если я оставлю буев, и объединить Ах и a.cpp, как
//Super.h
float *list=new float[10];
class Super{
public:
void function(){}
};
------------------------------------
// A.h
#pragma once
#include "Super.h"
class A{
public:
void function();
};
void A::function(){
std::cout<<"Working A!"<<std::endl;
}
Должен ли я комбинировать A.cpp и Ah? или мой дизайн плохой? Я использую XCode 8.
Это глобальная переменная. Это плохая практика. Может быть, вы могли бы рассказать нам немного больше о том, что вы хотите делать с «списком», может ли он быть членом или статическим членом «A», например? –
Да, имея глобальную переменную 'float * list = new float [10];' плохой дизайн. Но фактическая причина заключается в том, что вы объявляете глобальную переменную в файле заголовка. –
Нет, фактическая причина заключается в том, что вы объявляете глобальную переменную в файле заголовка, затем включаете этот заголовочный файл в несколько единиц перевода. –