Note that there are some explanatory texts on larger screens.

plurals
  1. POc++ - ‘function’ in namespace ‘std’ does not name a type
    primarykey
    data
    text
    <p>main.cc:</p> <pre><code>#include &lt;cstdio&gt; #include &lt;functional&gt; #include "segtree.h" // NOLINT int main() { const int n = 8; SegmentTree&lt;int&gt; segmentTree(n, 1, std::multiplies&lt;int&gt;()); for (int i = 0; i &lt; n; ++i) segmentTree.set(i, i + 1); for (int i = 0; i &lt; n; ++i) for (int j = i; j &lt; n; ++j) { int s = segmentTree.get(i, j); std::printf( "Function applied from data[%d] to data[%d] is equal to %d \n", i, j, s); } return 0; } </code></pre> <p>segtree.h: #ifndef SEGTREE_H_ // NOLINT #define SEGTREE_H_</p> <pre><code>#include &lt;cassert&gt; #include &lt;functional&gt; #include &lt;vector&gt; template &lt;typename T&gt; class SegmentTree { private: std::vector&lt;T&gt; tree; int levels; int n; int el; std::function&lt;T(T, T)&gt; f; T query(int l, int r, int st, int fi) { if (l == r) return get(l); int mid = (st + fi + 1) / 2; if (r &lt; mid) { return query(l, r, st, mid - 1); } else if (l &gt;= mid) { return query(l, r, mid, fi); } else { T left = query(l, mid - 1, st, mid - 1); T right = query(mid, r, mid, fi); return f(left, right); } } public: SegmentTree(const std::vector&lt;T&gt;&amp; data, std::function&lt;T(T, T)&gt; f = std::plus &lt;T&gt;()) { this-&gt;f = f; this-&gt;n = data.size(); // build tree levels = 1, el = 1; while (el &lt; static_cast&lt;int&gt;(data.size())) { el &lt;&lt;= 1; ++levels; } tree.assign(2 * el, T()); for (size_t i = 0; i &lt; data.size(); ++i) tree[i + el - 1] = data[i]; for (int i = el - 2; i &gt;= 0; --i) tree[i] = f(tree[2 * i + 1], tree[2 * i + 2]); } SegmentTree(int n, T val = T(), std::function&lt;T(T, T)&gt; f = std::plus &lt;T&gt;()) : SegmentTree(std::vector&lt;T&gt;(n, val), f) { } T get(int l, int r) { return query(l, r, 0, n); } T get(int index) { return tree[el - 1 + index]; } void set(int index, T value) { int i = el - 1 + index; tree[i] = value; do { i = (i-1) / 2; tree[i] = f(tree[i*2 + 1], tree[i*2 + 2]); } while (i &gt; 0); } }; </code></pre> <p>Error information after <code>g++ main.cc</code>:</p> <pre><code>In file included from main.cc:9:0: segtree.h:22:3: error: ‘function’ in namespace ‘std’ does not name a type segtree.h:42:12: error: ‘std::function’ has not been declared segtree.h:42:20: error: expected ‘,’ or ‘...’ before ‘&lt;’ token segtree.h:60:12: error: ‘std::function’ has not been declared segtree.h:60:20: error: expected ‘,’ or ‘...’ before ‘&lt;’ token segtree.h:59:3: error: default argument missing for parameter 3 of ‘SegmentTree&lt;T&gt;::SegmentTree(int, T, int)’ segtree.h: In constructor ‘SegmentTree&lt;T&gt;::SegmentTree(const std::vector&lt;T&gt;&amp;, int)’: segtree.h:43:15: error: ‘f’ was not declared in this scope segtree.h: In constructor ‘SegmentTree&lt;T&gt;::SegmentTree(int, T, int)’: segtree.h:61:45: error: ‘f’ was not declared in this scope main.cc: In function ‘int main()’: main.cc:14:29: error: no matching function for call to ‘SegmentTree&lt;int&gt;::SegmentTree(const int&amp;, int, std::multiplies&lt;int&gt;)’ main.cc:14:29: note: candidates are: segtree.h:59:3: note: SegmentTree&lt;T&gt;::SegmentTree(int, T, int) [with T = int] segtree.h:59:3: note: no known conversion for argument 3 from ‘std::multiplies&lt;int&gt;’ to ‘int’ segtree.h:41:3: note: SegmentTree&lt;T&gt;::SegmentTree(const std::vector&lt;T&gt;&amp;, int) [with T = int] segtree.h:41:3: note: candidate expects 2 arguments, 3 provided segtree.h:16:7: note: SegmentTree&lt;int&gt;::SegmentTree(const SegmentTree&lt;int&gt;&amp;) segtree.h:16:7: note: candidate expects 1 argument, 3 provided In file included from main.cc:9:0: segtree.h: In member function ‘void SegmentTree&lt;T&gt;::set(int, T) [with T = int]’: main.cc:16:29: instantiated from here segtree.h:78:7: error: ‘f’ was not declared in this scope segtree.h: In member function ‘T SegmentTree&lt;T&gt;::query(int, int, int, int) [with T = int]’: segtree.h:66:28: instantiated from ‘T SegmentTree&lt;T&gt;::get(int, int) [with T = int]’ main.cc:20:35: instantiated from here segtree.h:36:27: error: ‘f’ was not declared in this scope </code></pre> <p>I got this piece of code from github, but I am not very familiar with c++. Can anyone help?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload