Вызов функции внутри другой функции

0

У меня есть два файла:.cpp и.hpp файл. В файле.hpp есть класс с именем Knoten и определение публичной функции:

static void faerbe_algorithmus(bool jsp[5][5], std::list< std::list<int> > &liste_von_str_orth_spalten); 

В.cpp файле я пытаюсь вызвать функцию в другой функции (compute_J) следующим образом:

Knoten::faerbe_algorithmus(jsp, liste_von_str_orth_spalten); 

но я получаю следующую ошибку от g++:

In function 'compute_J(double*, double (*) [5])':
11_3.cpp:(.text+0x3fc): undefined reference to 'Knoten::faerbe_algorithmus(bool (*) [5], std::list<std::list<int, std::allocator<int> >, std::allocator<std::list<int, std::allocator<int> > > >&)'
collect2: error: ld returned 1 exit status

Что я делаю не так? При необходимости я могу разместить больше кода.

  • 0
    Является ли Кнотен пространством имен? У вас есть Knoten:: в вашем .cpp, но в вашем заголовке есть только имя функции.
  • 0
    Не уверен, почему вы обращаете внимание на вызов функции из другой функции. Запрет статической инициализации, это единственный способ вызвать функцию. Проблема в вашей неопределенной ссылке .
Показать ещё 2 комментария
Теги:

2 ответа

0

Неопределенная ссылка на Knoten :: faerbe_algorithmus

Является признаком того, что вам не хватает определения для статической публичной функции. Вы либо забыли определить его с помощью:

void Knoten::faerbe_algorithmus(bool jsp[5][5], std::list< std::list<int> > &liste_von_str_orth_spalten) {
    // ...
}

или вы не правильно привязываете определение.


На стороне примечания, я предлагаю вам отказаться от массивов C-стиля и начать использовать std::array. Это сэкономит вам массу неприятностей, особенно с массивом на размытие указателя. Здесь соответствующая версия:

void Knoten::faerbe_algorithmus(const std::array<std::array<bool, 5>, 5>& jsp, std::list< std::list<int> > &liste_von_str_orth_spalten) {
    // ...
}

Я знаю, что его, вероятно, сложнее написать, но вы можете создать для него псевдоним:

template<class Type, std::size_t Size>
using bidim = std::array<std::array<Type, Size>, Size>

и используйте его так:

void Knoten::faerbe_algorithmus(const bidim<bool, 5>& jsp, std::list< std::list<int> > &liste_von_str_orth_spalten) {
    // ...
}
  • 0
    Это помогло за ошибку. Спасибо !
0

Неопределенная ссылка часто означает, что вы забыли добавить реализацию для функции, которую вы пытаетесь вызвать.

Например:

Bad Foo.cpp

void doSomething();

int main()
{
    doSomething(); // undefined reference, there is no implementation
}

Хороший Foo.cpp

void doSomething();

int main()
{
    doSomething(); // this is OK, as the function is implemented later on
}

void doSomething()
{
    // insert code here
}

Если вы внедрили функцию где-то, проверьте правильность присвоения имени.

Например (относится к обоим пространствам имен и классам/структурам):

MyClass.hpp

class MyClass
{
public:
    static void doSomething();
};

Bad MyClass.cpp

#include "MyClass.hpp"

void doSomething() // not qualified properly
{
    // insert code here
}

Хороший MyClass.cpp

#include "MyClass.hpp"

void MyClass::doSomething() // now qualified properly
{
    // insert code here
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню