Я новичок в С++. Обычно я программирую на C #, поэтому у меня проблемы с массивами и циклами. Когда я пытаюсь распечатать содержимое динамического массива с помощью цикла, он говорит, что запрошенная область повреждена... Например, я дам ему распознать условие, используемое с содержимым массива, но не распечатаю его содержимое :
// Array.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
void main()
{
int size=3;
int *p;
int myarray[10];
myarray[3]=4;
p=new int[size];
p[2]=3;
if(myarray[3]==4){
cout << myarray[3] +"/n";
cout << "Why?";
}
else
cout << "Not equal " << endl;
cin.get();
delete [] p;
}
-. 121 ---849301-
Вместо того, чтобы использовать длинные списки аргументов в своих определениях функций, я предпочитаю передавать несколько фиксированных параметров и таблицу «дополнительных параметров», как эта:
function:doit( text, params )
end
Это хорошо, так как позволяет мне добавлять новые именованные параметры позже, не нарушая старые вызовы.
Проблема, с которой я сталкиваюсь, возникает, когда я пытаюсь установить значения по умолчанию для некоторых параметров :
function:doit( text, params )
local font = params.font or native.systemBold
local fontSize = params.fontSize or 24
local emboss = params.emboss or true
--...
end
. Приведенный выше код отлично работает во всех случаях, за исключением случаев, когда я передал «false» для тиснения :
doit( "Test text", { fontSize = 32, emboss = false } )
. Приведенный выше код приведет к тому, что для тиснения будет установлено значение true, когда я действительно хотел false.
Чтобы было ясно, я хочу, чтобы первое значение, отличное от -NIL, было присвоено тиснению, вместо этого я получаю первое значение, отличное от -false, и не -NIL.
Чтобы справиться с этой проблемой, я написал небольшой фрагмент кода, чтобы найти первое значение, отличное от -NIL, в таблице и вернуть его :
function firstNotNil(... )
for i = 1, #arg do
local theArg = arg[i]
if(theArg ~= nil) then return theArg end
end
return nil
end
. Используя эту функцию, я бы -записал назначение тиснения следующим образом:
local emboss = firstNotNil(params.emboss, true)
Это, безусловно, работает, но кажется таким неэффективным и чрезмерным. Я надеюсь, что есть более компактный способ сделать это.
Пожалуйста, обратите внимание :Я нашел эту рубиновую конструкцию, которая выглядела многообещающе, и я надеюсь, что в lua есть что-то подобное:
[c,b,a].detect { |i| i > 0 } -- Assign first non-zero in order: c,b,a