Я пишу пакет C ++ для дальнейшего использования с использованием Code :: Blocks.
Структура проекта выглядит следующим образом:
cNormal\
cNormal.cdp
src\
main.cpp # for testing purpose
cnormal_defs.h # important compiler definitions
cnormal_storage.h # includes all .h files from "./storage"
storage\
cnarray.h
cnarray.cpp
cnstack.h
cnstack.cpp
bin\
obj\
cnormal_storage.h:
// cnormal_storage.h
// *****************************************************************
// Includes all necessary headers for the cNormal storage subpackge.
//
#ifndef _cNORMAL_STORAGE_H_
#define _cNORMAL_STORAGE_H_
#include "storage/cnarray.h"
#include "storage/cnstack.h"
#endif // _cNORMAL_STORAGE_H_
Чтобы проверить классы, я создаю main-функцию в main.cpp .
// main.cpp
// *****************************************************************
// The main-file.
//
#include <iostream>
#include "cnormal_storage.h"
using namespace std;
int main() {
cnArry<int> arr(10);
arr[9] = 999;
arr[0] = 0;
cout << arr[9] << endl;
cout << arr.getLength();
}
Но компилятор (gcc) выдаёт мне undefined reference to ...
ошибок по поводу cnArray
.
Теперь cnarray.cpp
включает cnarray.h
(как это файл реализации), поэтому с помощью
#include "storage/cnarray.cpp"
работает просто отлично.
Похоже, что компилятор не может найти реализацию cnarray.h
, которая находится в cnarray.cpp
.
Я предполагаю, что это из-за структуры папок, вы можете сказать мне, как я могу это исправить?
Даже добавление src\storage
к директивам включения не исправляет , а не . (И я также не хочу добавлять его в include-пути, так как это было бы очень неудобно для пакета.)