討論區快速選單
知識庫快速選單
程式設計俱樂部Facebook粉絲團 網路投保旅行平安險 討論區最近新進100則主題
[ 回上頁 ] [ 討論區發言規則 ]
將指標 存入vector裡
更改我的閱讀文章字型大小
作者 : x890311x(腦殘)
[ 貼文 6 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/3/19 上午 12:40:45
#include <iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
class Node
{
public:
int value;
Node *right=NULL;
Node *left=NULL;
};
typedef Node *node;
int main()
{
int data[]={5,12,19,33,40,41};
vector <Node> arr;
for(int a=0;a<6;a++)
{
arr.push_back(new Node); <--- 這兩行分別出現錯誤
arr[a]->value_type=data[a]; <---
}
}
已經爬過文了 是參考 http://www.programmer-club.com.tw/showSameTitleN/c/34161.html
以下是噴出的錯誤
===============================================
huffman.cpp: In function 'int main()':
huffman.cpp:20:25: error: no matching function for call to 'std::vector<Node>::push_back(Node*)'
   arr.push_back(new Node);
     ^
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\vector:64:0,
     from huffman.cpp:3:
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_vector.h:914:7: note: candidate: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Node; _Alloc = std::allocator<Node>; std::vector<_Tp, _Alloc>::value_type = Node]
     push_back(const value_type& __x)
     ^~~~~~~~~
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_vector.h:914:7: note: no known conversion for argument 1 from 'Node*' to 'const value_type& {aka const Node&}'
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_vector.h:932:7: note: candidate: void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = Node; _Alloc = std::allocator<Node>; std::vector<_Tp, _Alloc>::value_type = Node]
     push_back(value_type&& __x)
     ^~~~~~~~~
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_vector.h:932:7: note: no known conversion for argument 1 from 'Node*' to 'std::vector<Node>::value_type&& {aka Node&&}'
huffman.cpp:21:9: error: base operand of '->' has non-pointer type '__gnu_cxx::__alloc_traits<std::allocator<Node> >::value_type {aka Node}'
   arr[a]->value=data[a];
     ^~
============================================================
希望各位 指點
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人x890311x註記此篇回應為很有道理 2019/3/19 上午 09:00:42
no known conversion for argument 1 from 'Node*' to 'const value_type& {aka const Node&}

編譯器不是告訴你了嗎?
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 408 | 人氣 0 | 評價 1890 | 評價/貼文 4.63 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人x890311x註記此篇回應為最佳解答 2019/3/19 上午 09:01:35
其實你的錯誤訊息就已經告訴你問題是什麼了!
我們錯誤訊息一般都只看第一條,因為後面的錯誤很可能是前面的錯誤造成後面語法分析失敗!

那就先看第一條說什麼:
huffman.cpp:20:25: error: no matching function for call to 'std::vector<Node>::push_back(Node*)'

看不懂我給中文翻譯:
huffman.cpp 檔案第 20 行第 25 個字開始,錯誤:std::vector<Node> 裡面沒有 push_back(Node*) 這個函式。

道理就是,你宣告了一個要放 Node 的容器,所以它就應該拿來放 Node 類型的東西,
但你卻打算放 Node* 進去,當然就不行了!

我不看你程式想要幹什麼,只求解決錯誤的話,把 push_back 那行改成下面這樣即可:
arr.push_back(Node());

然後再下一行:
arr[a]->value_type=data[a];

你先用 arr[a] 取出了 Node 類型的元素,然後用「->」去存取元素成員,
問題是你的元素不是指標啊!
好再來,你存取了 value_type 成員,問題是你的 Node 類別裡有這個成員嗎?

最後來看看你程式的意圖,你想要用一個容器來容納很多個 Node 元素,
可是看你的 Node 類別宣告,你這類別好像本身就是個二元樹容器,那你還要把元素放在別的容器裡才能管理???
 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 13050 
2 青衫 4760 
3 simula 4690 
4 coco 4030 
5 白老鼠(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.15625