C ++ Что может вызвать неразрешенные внешние ошибки в процессе компоновки при использовании статических членов класса? - PullRequest
2 голосов
/ 07 июля 2011

Я создал программу с классом, содержащим только статические элементы, в своем собственном комбо-файле cpp / h. Вероятно, когда я пытаюсь использовать эти статические элементы в своем коде, я получаю «неразрешенные внешние» ошибки на этапе компоновщика. Я не забываю включить файл h в мой файл cpp, который получает ошибки. Я не понимаю Это неправильный подход к дизайну?

По сути, я хочу, чтобы некоторые глобальные объекты, являющиеся частью стороннего API, были доступны для всей моей программы, поэтому я организовал все в один класс и сделал все статическим членом. Я также создал пустой приватный конструктор, чтобы предотвратить создание экземпляра класса. Это разумный подход? Все статические члены - это указатели, и я попытался начать с выделения новых объектов и прикрепления каждого к статическим указателям. Есть ли проблема с этим подходом?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 07 июля 2011

Вы помните, чтобы фактически определить переменную где-то вместо того, чтобы просто объявить ее в заголовке?

Foo.hpp:

#ifndef FOO_HPP
#define FOO_HPP

class Foo {
public:
  static int bar;
};

#endif

foo.cpp:

#include "Foo.hpp"

int Foo::bar; // <-- This being the critical line.
0 голосов
/ 07 июля 2011

Если вы обращаетесь к глобальным объектам в сторонней библиотеке, вам необходимо убедиться, что вы связываетесь с этой библиотекой. Простая компиляция заголовков для библиотеки не сделает этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...