【问题标题】:Why won't this work? C++为什么这行不通? C++
【发布时间】:2015-09-23 00:20:17
【问题描述】:

我最近通过阅读 Bjarne Stroustrup 编写的关于该语言的书开始学习 C++ 的基础知识,在他使用 Vector 创建结构的部分中遇到了一个问题。

产生的错误表明变量或字段“vector_init”声明为无效, 'Vector' 未在此范围内声明,'v' 未在此范围内声明,并且预期在 'int' 之前的主表达式

using namespace std;


int main(int argc, char const *argv[])
{
    struct Vector {
        int sz;                             // number of elements
        double* elem;                       // pointer to elements 
    };

    Vector my_first_vector;

    return 0;
}
void vector_init(Vector& v, int s)
{

    v.elem = new double[s];                 // allocate an array of s doubles
    v.sz = s;


}

【问题讨论】:

  • 欢迎来到 Stack Overflow。对于未来的问题,您可能需要考虑一个更具描述性的标题。另外,我建议阅读帮助中心中的How do I ask a good question?
  • 永远不要使用命名空间std;从来没有。

标签: c++


【解决方案1】:

错误消息的含义与它所说的完全一样;你已经在main 的范围内声明了结构Vector。在main 之外,没有其他函数知道Vector 是什么。要解决此问题,请将您对 struct Vector 的定义移到 main 块之外。

【讨论】:

    【解决方案2】:

    你应该搬家:

    struct Vector {
        int sz;                             // number of elements
        double* elem;                       // pointer to elements 
    };
    

    内外main

    【讨论】:

      【解决方案3】:

      您的代码存在一些问题...下面是一个允许它编译的修复:您需要在 main 之外声明 struct Vector

      using namespace std; // <~ this is bad practice. Try to not use it (or minimize its scope)
      
      struct Vector {
         int sz;                             // number of elements
         double* elem;                       // pointer to elements 
      };
      
      int main(int argc, char const *argv[])
      {
      
      
          Vector my_first_vector;
      
          return 0;
      }
      
      void vector_init(Vector& v, int s)
      {
          v.elem = new double[s];                 // allocate an array of s doubles (also leaks memory)
          v.sz = s;
      }
      

      我希望你打算编写一个vector_clear 方法,它将delete [] v.elem。否则你的程序会泄漏内存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多