void指针数组

时间:2011-03-29 23:36:30

标签: c++ arrays pointers stack void-pointers

这个问题再次出现在“Thinking in C ++”第7章,Q#7中。我相信Stack头文件应该改为Stack.h

        #ifndef STACK_H
        #define STACK_H

        class Stack {
          struct Link {
            void* data;
            Link* next;
            Link(void* dat, Link* nxt);
            ~Link();
          }* head;
        public:
          Stack();
          Stack(void* arr[], int size);
          ~Stack();
          void push(void* dat);
          void* peek();
          void* pop();
        };
在Stack.cpp中实现Stack :: Stack(void * arr [],int size),我相信可能会像:

       Stack::Stack(void* arr[], int size)
       {
         for (int i=0; i<size; i++)
          {
            push(arr[i]);
          }
       }

但是,在主测试文件StackTest.cpp中,如何将字符串数组的地址传递给此构造函数?以下是我提出的建议:

          #include "Stack.h"
          #include "require.h"
          #include <iostream>
          #include <string>
          using namespace std;

          int main() {

            string tst_arr[] = {"hi 1", "hi 2", "hi 3"};
            Stack string_arr((void**)tst_arr, 3);
            string* s;
            while((s = (string*)string_arr.pop()) != 0) {
              cout << *s << endl;
              delete s;
            }
          } 

但它有一些分段错误。我能想到的是将Stack :: Stack(void * arr [],int size)更改为Stack :: Stack(string arr [],int size),但是它不满足问题要求。 Stack的目的是存储通用对象,例如包括字符串。我相信我仍然很难理解void *指针和指针数组以及字符串数组与void *数组等之间的chagne ...任何人都可以帮我解决这个问题?非常感谢!!

1 个答案:

答案 0 :(得分:2)

你的Stack构造函数要求提供关于东西的指针数组,并给它一个对象数组。作为奖励,我给你正确的主要功能和释放记忆^^

#include <cstdlib>
// --- Includes your stuffs ---

using namespace std;

int main(int argc, char* argv[]) {
  string* tst_arr[] = new string[3];
  tst_arr[0] = new string("hi 1");
  tst_arr[1] = new string("hi 2");
  tst_arr[2] = new string("hi 3");
  Stack string_arr((void**)tst_arr, 3);

  // --- Do your stuffs ---

  for(int i =0; i < 3; ++i)
    delete tst_arr[i];
  delete[] tst_arr;

  return EXIT_SUCCESS;
}
相关问题