Сделайте файл 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>
В 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
, это является посторонним и обычно опускается.
Попытка:
extern int testlib(void);