C ++找不到错误

时间:2014-04-23 20:53:35

标签: c++

不确定我在这里做错了什么。我无法让它运行。

    #include "stdafx.h"
    #include <iostream>
    #include <vector>

    using namespace std;

   int _tmain(int argc, _TCHAR* argv[])
    {
        int a[] = { 2, 3, 4, 5 };
        skipOne(a, 2);  
    }

    void skipOne(int * array, int n)
    {
        int total = 0;
        for (int i = 0; i < sizeof(array); i++)
        {
            if (i != n)
            {
                total = + array[i];
            }           
        }    
        cout << "The total is: " << total << endl;
    }

这是我从下面的帮助中得到的。

#include "stdafx.h"
#include <iostream>
#include <vector>

using namespace std;

void skipOne(vector<int> & array, int n)
{

    int total = 1;
    for (int i = 0; i < array.size(); i++)
    {
        if (i != n)
        {
            total *= array[i];
        }
    }
    cout << "The total is: " << total << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    vector<int> a = { 2, 3, 4, 5 };
    skipOne(a, 0);
    skipOne(a, 1);
    skipOne(a, 2);
    skipOne(a, 3);
}

3 个答案:

答案 0 :(得分:5)

sizeof对传递的数组或指针不起作用。您必须将数组长度作为参数传递。

此外,您必须在使用之前声明函数。

void skipOne(int * array, int n, int length); // declare here

int _tmain(int argc, _TCHAR* argv[])
{
    int a[] = { 2, 3, 4, 5 };
    skipOne(a, 2, 4);  
}

void skipOne(int * array, int n, int length)
{
    int total = 0;
    for (int i = 0; i < length; i++) // use length here
    {
        if (i != n)
        {
            total += array[i]; // += instead of = +
        }           
    }    
    cout << "The total is: " << total << endl;
}

答案 1 :(得分:0)

sizeof(array)等同于sizeof(int *),因为数组的类型是int *,通常等于4或8,具体取决于使用的系统。它与数组a中的元素数量没有共同之处。 程序中使用的任何名称也应在使用前定义。你在main中使用函数skipOne但它尚未声明。

因此,有效代码可以采用以下方式

#include "stdafx.h"
#include <iostream>

int skipOne( const int *, int, int );

int _tmain(int argc, _TCHAR* argv[])
{
    int a[] = { 2, 3, 4, 5 };

    std::cout << "The total is: " << skipOne( a, sizeof( a ) / sizeof( *a ), 2 ) 
              << std::endl;
}

int skipOne( const int * array, int n, int k )
{
    int total = 0;

    for ( int i = 0; i < n; i++ )
    {
        if ( i != k )
        {
            total += array[i];
        }           
    }

    return total;    
}

您也可以使用标准容器std :: array。在这种情况下,代码看起来会更简单。例如

#include "stdafx.h"
#include <iostream>
#include <array>

int skipOne( const std::array<int, 4> &, int );

int _tmain(int argc, _TCHAR* argv[])
{
    std::array<int, 4> a = { 2, 3, 4, 5 };

    std::cout << "The total is: " << skipOne( a, 2 ) 
              << std::endl;
}

int skipOne( const std::array<int, 4> &a, int k )
{
    int total = 0;

    for ( int i = 0; i < a.size(); i++ )
    {
        if ( i != k )
        {
            total += a[i];
        }           
    }

    return total;    
}

答案 2 :(得分:-1)

您需要先声明skipOne并使用vector.size()

#include "stdafx.h"
#include <iostream>
#include <vector>

using namespace std;

void skipOne(int * array, int n);

int _tmain(int argc, _TCHAR* argv[])
{
    vector<int> a = { 2, 3, 4, 5 };
    skipOne(a, 2);  
}

void skipOne(vector<int> & array, int n)
{
    int total = 0;
    for (int i = 0; i < array.size(); i++)
    {
        if (i != n)
        {
            total = + array[i];
        }           
    }    
    cout << "The total is: " << total << endl;
}