我正在研究一个可以计算表达式中使用的运算符数量的函数.我的代码如下:
data Expr = Lit Int |
Expr :+: Expr |
Expr :-: Expr
size :: Expr -> Int
size (Lit n) = 0
size (e1 :+: e2) = 1 + (size e1) + (size e2)
size (e1 :-: e2) = 1 + (size e1) + (size e2)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用Hugs98执行此代码时,我收到以下错误:
Main> size 2+3
ERROR - Cannot infer instance
*** Instance : Num Expr
*** Expression : size 2 + 3
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么?我真的不在乎自己.
我正在使用菜单选项来连接到使用OpenFrameworks构建的C ++应用程序中的wifi。我想使用wpa_ctrl库,但无法编译。
程式码片段:
NetworkWrapper.h:
#ifndef NETWORKWRAPPER_H_
#define NETWORKWRAPPER_H_
class NetworkWrapper {
public:
NetworkWrapper():
private:
struct wpa_ctrl* m_ctrl;
};
#endif
Run Code Online (Sandbox Code Playgroud)
NetworkWrapper.cpp:
#include "NetworkWrapper.h"
extern "C" {
#include "wpa_ctrl.h"
}
NetworkWrapper::NetworkWrapper() {
m_ctrl = wpa_ctrl_open("wlan0");
}
Run Code Online (Sandbox Code Playgroud)
错误:
***/NetworkWrapper.cpp:7: undefined reference to `wpa_ctrl_open'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我试过抛出include并使用和不使用extern“ C”,但是看到wpa_ctrl.h也包含在extern“ C”标签中没有什么区别,尽管使用#ifdef __cplusplus(已定义,我将选中)。
我现在几乎没有主意了。我应该注意,我尝试将wpa_ctrl.c包含在外部的“ C”标记中,据我所知,不应将其编译(?)。这也给出了完全相同的结果。这导致我手动编译wpa_ctrl库并将其复制到obj目录,但再次出现:同样的结果。
感谢您抽出宝贵的时间阅读我的问题,希望对您有所帮助!
*编辑* 根据请求,我的链接选项(我将其修剪了一下):
g ++ -o bin / application_debug obj / linux64 / Debug / src / main.o [...] obj / linux64 / Debug / …