I'll start by saying that Marc's solution is the right way to solve this, but I thought it might be useful to explain why a solution is needed.
TikZ is pretty good at sending stuff to its mathematical parser, meaning that you can specify coordinates using expressions. And for more complicated stuff one has the calc library. But there are situations where it wouldn't expect an expression and so where it doesn't bother with the parser. One of these is node names. Since names themselves are not assumed to have any semantic meaning, there's not a sensible way to interpret them in the parser. Thus the node V1 is simply a name of two symbols and has no implied relation to the node V2. So when it encounters V{1+1}, TikZ has no logic that tells it that what you really meant was V2. In short, node names are not parsed as mathematical expressions.
However, node names are expanded. That is, since a node name is meant to be simply a string then TikZ passes node names through edef to try to expand any macros that happen to be lying around inside it. This is why V\x and V\sx do work.
Unfortunately, PGF's maths parser is not expandable and this is why one has to do the calculation first - either implicitly (as in Marc's solution) or explicitly (as in yours) - and then insert the result in the node name stored in an expandable macro. But there are other maths parsers around that are expandable and can be used in this context. In particular, the primitive \numexpr expands (when prefixed by \the), whence:
\documentclass{article}
%\url{http://tex.stackexchange.com/q/101134/86}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\foreach \x in {1,2,3} {
\coordinate (V\x) at ($(\x-1,0)$);
}
\foreach \x in {1,2} {
\draw[black] (V\x) -- (V\the\numexpr\x+1\relax);
}
\end{tikzpicture}
\end{document}
works.
But as I said at the start, Marc's solution is better here as it doesn't mix methods: all the calculation is done by TikZ/PGF and so one is assured of consistency.
evaluateoption to the\foreachstatement.. – Håkon Hægland Mar 06 '13 at 12:59evaluateyou are drawing a line to(V2.0)and(V3.0)which is visible if you use nodes instead of coordinates. Either you need to addint(...)around\x+1or use[count=\sx from 2]for directly getting integers. – percusse Mar 06 '13 at 13:08