'root'没有命名类型错误

时间:2018-01-18 10:14:56

标签: c++ struct compiler-errors

编译以下C ++代码时,

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    TreeNode* construct(vector<int> nums,int start, int end)
    {
        if(start>end)
            return NULL;

        int i,index,v = INT_MIN;
        for(i=start;i<=end;i++)

            if(nums[i]>v)
            {
                v = nums[i];
                index = i;
            }
        }

        TreeNode* root = new TreeNode(v);
        root->left = construct(nums,start,index-1);
        root->right = construct(nums,index+1,end);
        return root;
    }
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        return construct(nums,0,nums.size()-1);
    }
};

我收到以下错误:

Line 27: 'root' does not name a type

我有很多关于这个错误的文章,但似乎都没有解决这个问题。 使用 malloc()也不起作用。

谢谢!

2 个答案:

答案 0 :(得分:1)

编译器不知道root变量的类型,因为它的定义已被注释掉。 您也有一个大括号问题,因为for循环可能需要一个,因为您在if之后有一个结束。

如下所示,应该这样做。

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
   };

class Solution {
    TreeNode* construct(vector<int> nums,int start, int end)
    {
        if(start>end)
            return NULL;

        int i,index,v = INT_MIN;
        for(i=start;i<=end;i++){ //here a missing brace

            if(nums[i]>v)
            {
                v = nums[i];
                index = i;
            }
        }
        TreeNode* root = new TreeNode(v);
        root->left = construct(nums,start,index-1);
        root->right = construct(nums,index+1,end);
        return root;
    }
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        return construct(nums,0,nums.size()-1);
    }
};

答案 1 :(得分:0)

因此,提供的示例非常不清楚,但这是代码应该如何格式化。

注意:我目前无法访问编译器来测试它。

  

在头文件中

     

Solution.h

// Definition for a binary tree node.
struct TreeNode 
{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution 
{
public:

   Solution();
   ~Solution();

   TreeNode* construct(vector<int> nums,int start, int end);
   TreeNode* constructMaximumBinaryTree(vector<int>& nums);
};
  

在CPP文件中

     

Solution.cpp

Solution::Solution()
{
    // Init any members
}

Solution::~Solution()
{
    // Delete any members
}

TreeNode* Solution::construct(vector<int> nums,int start, int end)
{
    if(start>end)
        return NULL;

    int i,index,v = INT_MIN;
    for(i=start;i<=end;i++)
    {

        if(nums[i]>v)
        {
            v = nums[i];
            index = i;
        }
    }

    TreeNode* root = new TreeNode(v);
    root->left = construct(nums,start,index-1);
    root->right = construct(nums,index+1,end);
    return root;
}

TreeNode* Solution::constructMaximumBinaryTree(vector<int>& nums) 
{
    return construct(nums,0,nums.size()-1);
}