Я новичок в С++. Я пытаюсь изменить очень сложный код видеокодека в рамках моего школьного проекта последнего года обучения. Это мой код:
Это заголовочный файл, в котором я объявил три внешних переменных: yuv.h
#include <vector>
namespace X265_NS
{
extern int frameNumber;
extern int frameSize;
extern std::vector<int>numbers;
class YUVInput : public InputFile, public Thread
{
protected:
// some more variables
public:
// more variables and function declarations
};
}
Это первый файл, в котором используются эти внешние переменные: yuv.cpp.
#include "yuv.h"
//more includes
#include <vector>
using namespace X265_NS;
int frameNumber;
int frameSize;
std::vector<int>numbers;
// some stuff and function calls
// here I use my extern variables in a function
frameNumber = readCount.get();
frameSize = ceil((double)height / 32) * ceil((double)width / 32);
//more stuff
bool YUVInput::populateFrameQueue()
{
if(read<1)
{
ifstream file("/home/abu-bakr/bin/test.txt");
int number;
while (file >> number)
numbers.push_back(number);
}
}
// more stuff
Это второй класс, в котором я использую эти внешние переменные:
анализ.cpp
#include "yuv.h"
#include <vector>
....
using namespace X265_NS;
// some stuff
// its in a function and only place where I am using these variables
int qp_ctu = numbers.at((ctu.m_cuAddr + 1) + (frameSize*(frameNumber - 1)));
// more stuff
Я хочу знать:
- Это правильное место для объявления моих внешних переменных в файле yuv.h?
- Если я определяю эти переменные в обоих файлах cpp, генерируется ошибка «уже определенная». Если я определяю их только в одном классе, в другом классе возникает ошибка «неразрешенный внешний символ».