объявление функции не является прототипом

Сделайте файл src/user/MyException.clj (где src включен CLASSPATH), содержащий:

(ns user.MyException
  (:gen-class :extends java.lang.Exception))

Проверьте значение *compile-path* в REPL. Убедитесь, что этот каталог существует и находится на CLASSPATH. Создайте каталог, если он не существует; Clojure не сделает этого для вас.

user> *compile-path*
"/home/user/foo/target/classes/"
user> (System/getProperty "java.class.path")
".......:/home/user/foo/target/classes/:......."

Скомпилируйте свой класс:

user> (compile 'user.MyException)
user.MyException

Если это сработало, в *compile-path* теперь у вас должны быть файлы примерно так:

/home/user/foo/target/
/home/user/foo/target/classes
/home/user/foo/target/classes/user
/home/user/foo/target/classes/user/MyException.class
/home/user/foo/target/classes/user/MyException__init.class
/home/user/foo/target/classes/user/MyException$loading__4410__auto__.class

Перезагрузите Clojure REPL / JVM, чтобы загрузить эти классы. Опять же, убедитесь, что эти новые файлы классов находятся на CLASSPATH. Теперь вы сможете использовать свой класс:

user> (user.MyException.)
#<MyException user.MyException>
147
задан Vadim Kotov 11 October 2017 в 11:40
поделиться

2 ответа

В C int foo() и int foo(void) различные функции. int foo() принимает произвольное число аргументов, в то время как int foo(void) принимает 0 аргументов. В C++ они имеют в виду то же самое. Я предлагаю, чтобы Вы использовали void последовательно, когда Вы не имеете в виду аргументов.

, Если у Вас есть переменная a, extern int a;, способ сказать компилятор, который a символ, который мог бы присутствовать в различной единице перевода (Компилятор C выступают за исходный файл), не разрешайте его до времени ссылки. С другой стороны, символы, которые являются именами функций, так или иначе разрешены во время ссылки. Значение спецификатора класса памяти на функции (extern, static) только влияет на свою видимость, и extern значение по умолчанию, таким образом extern является на самом деле ненужным.

я предлагаю удалить эти extern, это является посторонним и обычно опускается.

315
ответ дан heinrich5991 11 October 2017 в 11:40
поделиться

Попытка:

extern int testlib(void);
22
ответ дан Lasse Vågsæther Karlsen 11 October 2017 в 11:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: